Android: Sqlite rawQuery вне диапазона

#android #sqlite

#Android #sqlite

Вопрос:

Я пытаюсь использовать rawQuery с SimpleCursorAdapter для отображения в listview, но он продолжает выдавать мне ошибку

04-29 13:36:36.453: ОШИБКА /AndroidRuntime(29539): исключение java.lang.RuntimeException: Не удается запустить activity ComponentInfo{com.QuoteMachine/com.QuoteMachine.Цитата}: android.database.sqlite.Исключение SQLiteException: привязка или индекс столбца вне диапазона: обработайте 0x2f65e0

У меня есть таблица с именем Quotes со столбцами _id, auth_name, quote, category, и мой запрос выглядит следующим образом

 return qmDB.rawQuery("SELECT _id as _id, auth_name, quote, category FROM Quotes",
            new String[]{"WHERE auth_name = 'Robert Anton Wilson'"});
  

Может ли кто-нибудь знать о предложении по устранению этой проблемы?Мой первоначальный план состоял в том, чтобы использовать базовую инструкцию запроса, но возникла проблема со столбцом _id, и было предложено использовать этот подход.

Ответ №1:

Вы неправильно используете rawQuery(). Вторая переменная предназначена для аргументов, а не для предложения WHERE. Используйте это вместо:

 return qmDB.rawQuery("SELECT _id as _id, auth_name, quote, category FROM Quotes WHERE auth_name = ?",
            new String[] { "Robert Anton Wilson" } );
  

Ответ №2:

Возможно, путаница с функцией quote()? Один из ваших столбцов называется ‘quote’.

http://www.sqlite.org/lang_corefunc.html

http://www.sqlite.org/lang_keywords.html

Комментарии:

1. Я понимаю, что вы имеете в виду, но это слово не используется в контексте функции и не содержит каких-либо параметров, а также при выборе строки «», так что это не проблема. Хотя спасибо за предложение 🙂