2013-04-30 3 views
0

У меня есть два запроса: один с ?, который я заменю с помощью аргументов выбора, а другой, где весь запрос был подготовлен в виде строки. Запрос с ?, похоже, не возвращает никакого результата и никакой ошибки.Параметрированный запрос sqlite для Android не работает?

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) }; 
Смежные вопросы