【问题标题】:Sqlite weird rawQuery behavior in AndroidAndroid中的Sqlite奇怪的rawQuery行为
【发布时间】: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 我无法选择评论作为正确答案,所以...

标签: android sqlite


【解决方案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 + "%"});

【讨论】:

    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2020-07-13
    相关资源
    最近更新 更多