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