oracle排序 order by 怎么样动态传值

为什么从后台传值后,在preparedstatement中时就把我传入的值当字符串处理了,怎么样让它认为是该oracle结果集的中的一列啊。。。请教。。。。

恩,我建议你呢把那个动态的值,写到sql后面,如:
String sql ="select * from user where id=? order by "+动态值追问

select *
from (SELECT A.*, ROWNUM RN
FROM ( select count(a.messageid) sumnew
from detailmanage b
left join bbsmanage a on a.detailid = b.detailid
group by order by ? desc
) A WHERE ROWNUM = ?
这是主要,和分页和排序一同实现的SQL语句,为什么每次从action传值后,第一个?,order by后 传的的值都是按字符串处理了,结果也就是按照字符串处理后查询出来的结果

追答

因为你preparedstatement传值是用的是String类型啊,他会变成 order by 'id' 这样子的,?号的意思是你传入的值,一般用作某个列对应的实际值,所以转换成sql时,如果你指定该字段是字符串,则会自动加上引号。

追问

这是问解决之道呢,应该怎么改,String int我都改了,不管用,如果要传入传什么类型的,求解法

追答

写一个String 类型的变量等于你动态传入的order by的值,然后在SQL里加进去就可以了啊。
例:
String orderBy="id,name";//假设为动态传入的ORDER BY 的值
String sql="select *
from (SELECT A.*, ROWNUM RN
FROM ( select count(a.messageid) sumnew
from detailmanage b
left join bbsmanage a on a.detailid = b.detailid
group by order by "+orderBy+" desc //注意这里
) A WHERE ROWNUM = ?"

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-12
一般来说,没有索引的裸表,按你的记录插入数据库的顺序来排列。就是说,先插入的先被全表扫描搜出来。
有索引的情况下,如果走的是索引,则按照索引字段的扫描顺序排序。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网