我有两个查询,一个带有?
,我通过选择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);
答案 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”