У меня проблемы при отправке запросов с параметрами в БД на платформе Android (2.2).Я создал таблицу следующим образом:
db.execSQL("CREATE VIRTUAL TABLE " + Msg._TABLE_NAME + " USING FTS3 ("
+ Msg._ID + " INTEGER, "
(...)
+ Msg.READ + " SHORT DEFAULT 0,"
+ Msg.URGENT + " SHORT DEFAULT 0"
+ ");");
Затем я пытаюсь выполнить запрос с помощью параметризованного запроса:
String[] columns = new String[] {Msg.ROWID, Msg.TITLE, Msg.READ, Msg.URGENT};
(...)
getContentResolver().query(Msg.CONTENT_URI, columns,
Msg.URGENT + "=? AND " + Msg.READ + "=?" + , whereArgs, null);
, где whereArgs
меняется для каждого запроса:
String[] urgentUnread = new String[]{"1", "0"};
String[] regularUnread = new String[]{"0", "0"};
но независимо от того, что он возвращает 0 результатов / строк, даже если данные существуют.Поставщик контента не изменяет параметры, и запрос ничего не возвращает, используя QueryBuilder, а также при вызове запроса «напрямую»:
Cursor c = db.query(tables, columns, where, whereArgs, groupBy, having, orderBy, limit);
Запрос работает, если я просто выполню String concat:
getContentResolver().query(Msg.CONTENT_URI, columns,
Msg.READ + "=0 AND " + Msg.URGENT + "=1", null, null);
но это, кажется, убивает цель запросов param и кеширует неприятно.Далвик жалуется (после выполнения большого количества запросов) на то, что в кеше нет места для запроса, и, по иронии судьбы, говорит мне использовать параметризованные запросы с '?'.Я хотел бы, поверьте мне:)
Я знаю, что JavaDoc утверждает, что параметры связаны как StringS, но я просто не могу в это поверить ... потому что это было бы главным ... хм, ... WTF
Где я ошибся?
Заранее спасибо.