0

2 つのクエリがあります。1 つ?は選択引数を介して置換するもので、もう 1 つはクエリ全体が文字列として準備されているものです。を使用したクエリ?は、結果もエラーも返さないようです。

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);
4

3 に答える 3

0

これを試して

     String query2 = "strftime('"
              + Constants.SQLITE_DATABASE_STRFORMAT
              + "', "+ "?" +") BETWEEN strftime('"
              + Constants.SQLITE_DATABASE_STRFORMAT + "', "+ "?" +"' ) AND strftime('"
              + Constants.SQLITE_DATABASE_STRFORMAT + "', "+ "?"+"' )";
于 2013-04-30T19:15:27.923 に答える