Где пункт в SQLite не работает в Android :( - PullRequest
7 голосов
/ 24 ноября 2010

Я получаю досадную ошибку при попытке запроса некоторых данных в SQLite.

Вот мой код:

Cursor cursor= db.query(TABLE_IMAGES, new String[]{"_id"}, "name" +" = "+compareToThis, null, null, null, null);

Я просто возвращаю курсор в виде строки.

Ошибка говорит:

нет такого столбца: CompareToThis: при компиляции ..... оператор

У меня такой вопрос: почему SQLite устанавливает атрибут CompareToThis в качестве столбца, если это просто значение?

Как я могу это исправить?

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 24 ноября 2010
Cursor cursor= db.query(TABLE_IMAGES, new String[]{"_id"}, "name" +" = ?", new String[]{compareToThis},  null, null, null);

Выбор должен включать заполнитель для параметра, а следующий аргумент должен быть массивом параметров.

1 голос
/ 24 июня 2016

Решение Владимира работает, однако, если вы похожи на меня и удивляетесь, почему ваш подход изначально не сработал, когда должен был, вот почему: Это потому, что он ожидает целое число, если вы не использовали (одинарные или двойные) кавычки, чтобы указать, что это строка.

Например, в MySql это не даст результатов:

SELECT * FROM clients WHERE firstName = Bob; -- This will not work.

Однако, когда вы заключаете его в кавычки, он возвращает результат, потому что идентифицирует Боба как строковый литерал.

Select * FROM clients WHERE firstName = 'Bob'; -- Single quotes work.
Select * FROM clients WHERE firstName = "Bob"; -- Double quotes as well.

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

Cursor cursor= db.query(TABLE_IMAGES, new String[]{"_id"}, "name" +'" = "+compareToThis+"'", null, null, null, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...