#android #sqlite #where
#Android #sqlite #where-предложение
Вопрос:
SELECT * FROM <TableName> WHERE <attribute(id)> IN <ArrayList type>
но возникает ошибка
04-24 21:18:41.748: ОШИБКА /Error(29495): android.database.sqlite.Исключение SQLiteException: нет такой таблицы: 1: , при компиляции: ВЫБЕРИТЕ * ИЗ Main, ГДЕ идентификатор В [1]
в принципе, я хочу выбрать те строки с атрибутом (id), которые присутствуют в ArrayList… но формат ArrayList не совпадает с форматом, требуемым для этого типа запроса (я думаю), и я думаю, что это причина, его некорректная работа
если я запрашиваю его с:
SELECT * FROM <TableName> WHERE <attribute(id)> IN <Integer>
это показывает мне правильный результат… но obv выбирает только строку этого конкретного идентификатора…
примечание: ArrayList заменен на Integer… (который является типом данных моего атрибута (id))
Заранее спасибо 🙂
Комментарии:
1. Я не вижу никаких проблем с запросом (в виде псевдокода), но не могли бы вы опубликовать какой-нибудь исходный код о том, как вы используете запрос в Android. Также обратите внимание, что запрос к базе данных обычно возвращает курсор, а не ArrayList.
Ответ №1:
Не существует такого понятия, как IN <ArrayList type>
.
Вам нужно самостоятельно вычислить перечисляющую строку, используя JAVA-код.
SELECT * FROM <TableName> WHERE _id IN ('1','2','3','4','5')
Также обратите внимание, что на Android рекомендуется использовать первичный ключ _id
с подчеркиванием.
Комментарии:
1. k итак, как мне поступить с этим? потому что я не знаю, сколько элементов в arraylist…
2. Вы просто объединяете элементы столько раз, сколько их есть, и создаете строку такой длины, какая вам нужна. Вам нужно создать строку!
Ответ №2:
При работе с приложениями я предпочитаю, чтобы List
которое я использую, содержало элементы, которые оно содержит, например:
List<ElementType> = ...
Делая это, вы можете просто запросить у каждого элемента их идентификатор. Решение Pentium10 справится с этой задачей, но я предпочитаю делать это, поскольку это дает больше гибкости.