Извлечение набора строк из базы данных sqlite

#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 справится с этой задачей, но я предпочитаю делать это, поскольку это дает больше гибкости.