Android中的Sqlite奇怪的rawQuery行为
Posted
技术标签:
【中文标题】Android中的Sqlite奇怪的rawQuery行为【英文标题】:Sqlite weird rawQuery behavior in Android 【发布时间】:2012-05-16 02:45:01 【问题描述】:我使用 SQLiteDatabase 对象的 rawQuery 方法。
当我写作时
db.rawQuery("select * from xxx order by ? desc;", new String[] "edit_time");
它不会对结果排序。
但是当我写的时候
db.rawQuery("select * from xxx order by edit_time desc;", null);
它命令。
我做错了什么?
感谢桑迪斯,我发现我误读了文档。不应该有“;”。但删除“;”好像没什么影响。
【问题讨论】:
当您将内容放入选择参数中时,它们被绑定为字符串,它们不会自动成为 SQL 的一部分。如果要使排序变量将字符串与要排序的列连接起来。 @Jens 我无法选择评论作为正确答案,所以... 【参考方案1】:documentation 指定了"The SQL string must not be ; terminated"
,也许这就是你的问题的根源。
【讨论】:
刚刚测试过。有或没有;,第二个有效,第一个无效。 要明确一点,如果删除 desc 后的分号,第一个不起作用?如果是这样的话,我对地狱的回答就打破了这个理论。【参考方案2】:正如 Jens 所说的第一个问题:
db.rawQuery("select * from xxx order by ? desc;", new String[] "edit_time");
变成:
select * from xxx order by 'edit_time' desc
由于我们不关心列名上的 SQL 注入,您应该使用:
db.rawQuery("select * from xxx order by edit_time desc", null);
selectionArgs 旨在以这种方式使用:
db.rawQuery("select * from xxx order by edit_time like ? desc", new String[] "%" + orderBy + "%");
【讨论】:
以上是关于Android中的Sqlite奇怪的rawQuery行为的主要内容,如果未能解决你的问题,请参考以下文章