参数化查询android sqlite无法正常工作?

时间:2013-04-30 18:49:33

标签: android database sqlite cursor

我有两个查询,一个带有?,我通过选择args替换,另一个用整个查询作为字符串编写。 ?的查询似乎没有返回任何结果,也没有任何错误。

String query1 = "strftime('"
                + Constants.SQLITE_DATABAE_STRFORMAT
                + "', "+ COLUMN_NAME_DATE_CREATED +") BETWEEN strftime('"
                + Constants.SQLITE_DATABAE_STRFORMAT + "', '"+ sdf.format(fromDate) +"') AND strftime('"
                + Constants.SQLITE_DATABAE_STRFORMAT + "', '"+ sdf.format(toDate)+"')";

上面的查询按预期返回结果。

String query2 = "strftime('"
                + Constants.SQLITE_DATABASE_STRFORMAT
                + "', "+ "?" +") BETWEEN strftime('"
                + Constants.SQLITE_DATABASE_STRFORMAT + "', "+ "?" +") AND strftime('"
                + Constants.SQLITE_DATABASE_STRFORMAT + "', "+ "?"+")";




    String[] selectionArgs = new String[] {
            COLUMN_NAME_DATE_CREATED,
            sdf.format(fromDate), sdf.format(toDate) };

上面的查询2不会返回任何结果。如下所示创建cursor,区别在于对于查询1,selectionArgs设置为空数组。

Cursor cursor = queryBuilder.query(database.getReadableDatabase(),
                projection, selection, selectionArgs, null, null, sortOrder);

3 个答案:

答案 0 :(得分:1)

问题是带strftime的参数化查询仅适用于参数化的时间戳,而不适用于某些原因的列名。

以下作品

String whereClause = "strftime('"
                + Constants.SQLITE_DATABASE_STRFORMAT + "', " + COLUMN_NAME_DATE_CREATED
                + ") BETWEEN strftime('" + Constants.SQLITE_DATABASE_STRFORMAT
                + "', " + "?" + ") AND strftime('"
                + Constants.SQLITE_DATABASE_STRFORMAT + "', " + "?" + ")";

String[] selectionArgs = new String[] {
        sdf.format(fromDate), sdf.format(toDate) };

答案 1 :(得分:0)

试试这个

     String query2 = "strftime('"
              + Constants.SQLITE_DATABASE_STRFORMAT
              + "', "+ "?" +") BETWEEN strftime('"
              + Constants.SQLITE_DATABASE_STRFORMAT + "', "+ "?" +"' ) AND strftime('"
              + Constants.SQLITE_DATABASE_STRFORMAT + "', "+ "?"+"' )";

答案 2 :(得分:0)

您可能还想查看query1中的拼写错误 - 即“DATABAE”