2013-04-30 63 views
0

我有兩個查詢,其中一個帶有?,我通過選擇參數替換另一個查詢已經準備好的字符串。與?查詢似乎沒有返回任何結果,也沒有任何錯誤。參數化查詢android sqlite不工作?

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

試試這個

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

您可能還需要在QUERY1檢查出拼寫錯誤 - 即「DATABAE」

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