2014-12-26 3 views
0

Я хочу, чтобы создать запрос, как это:Java - SQLite - Как использовать набор значений для одного столбца в where where?

SELECT * FROM my_table WHERE column_1 in (1, 2, 3); 

Этот запрос работает в редакторе SQLite, но я хочу использовать его в Java. Я стараюсь использовать его как это:

String query = "SELECT * FROM mu_table WHERE coumn_1 in ?"; 
String[] args = {"(1, 2, 3)"}; 
Cursor c = db.rawQuery(query, args); 

Но это не работает. Произошла следующая ошибка:

рядом с «?»: Синтаксическая ошибка (код 1): при компиляции: SELECT * FROM my_table WHERE column_1 in?

Почему это неправильно и что является правильным способом?

ответ

1
String query = "SELECT * FROM mu_table WHERE coumn_1 in (?, ?, ?)"; 
String[] args = new String[]{String.valueOf(1), String.valueOf(2), String.valueOf(3)}; 
Cursor c = db.rawQuery(query, args); 

Как требуется передать аргумент выбора в принудительном порядке в виде строки, мы можем передать либо как

String[]{String.valueOf(1), String.valueOf(2), String.valueOf(3)} 

или

String[]{"1", "2", "3"} 

но это будет сравнить, как только число, а не String. Чтобы сделать его по сравнению в виде строки, мы должны пройти как

String[]{'1','2','3'} 

но это не требуется в данном контексте вопроса.

+0

Извините, но я не имею никакого объяснения для этого, просто я реализовал в моем коде я знаю. ТАК, если кто-нибудь может объяснить, пожалуйста, уделите время, чтобы всякий раз, когда кто-либо посещает эту страницу в будущем, для подобного рода вопросов может быть какое-то объяснение, чтобы понять и переварить вещи. –

+0

Это сравнивается с тремя строками, а не цифрами. –

+1

это было просто для примера пользователя. пользователь может изменять параметры в соответствии с требованиями. Не думайте, что это приводит к отрицательному голосу. –

0

Параметры используются для одиночных значений не для интерпретации как SQL.

Кроме того, большинство функций в API баз данных Android допускают только строковые параметры.

Этого запрос должен быть использован непосредственно:

db.rawQuery("SELECT ... IN (1, 2, 3)", null);