【问题标题】:SQLiteDirectCursorDriver usage of SelectionArgs or workaround - using placeholdersSelectionArgs 的 SQLiteDirectCursorDriver 使用或解决方法 - 使用占位符
【发布时间】:2012-09-13 00:08:32
【问题描述】:

我有一个 rawQuery 字符串正在运行,但 SQlite 抛出此警告:

SQLiteDirectCursorDriver(1058): 找到以 ; 结尾的 SQL 字符串

因为报价问题。因此,我尝试在没有真正替换值的查询中使用 SelectionArgs,如下所示:

String query = "SELECT Min(?) as oldest, Max(?) as newest, COUNT(?) as nb_data FROM ? WHERE ? BETWEEN (SELECT Min(?) FROM ?) AND (SELECT Max(?) FROM ?)";
String[] values = new String[] { TS, TS, col_2, table, TS, TS, table, TS, table };
Cursor mCount = database.rawQuery(query, values);

即使使用较少的 SelectionArgs 字符串(仅在查询的“WHERE”部分),我也无法让它工作,因为没有真正的值替换要求,而是占位符。

是否有解决方案来设置这个准备好的语句(使用占位符而不是使用引号或重写原始查询)以避免收到 SQLiteDirectCursorDriver 警告?

【问题讨论】:

    标签: android sqlite where-clause


    【解决方案1】:

    参数只能用于表达式,不能用于标识符。

    为防止出现此警告,只需省略 SQL 查询字符串末尾的分号即可。

    【讨论】:

    • 谢谢,这也是我结束的地方:-)。
    猜你喜欢
    • 1970-01-01
    • 2014-11-14
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多