Как получить несколько строк в SQLite за раз в Android?

Я хочу, например, получить несколько столбцов из базы данных SQLite У меня есть данные с идентификаторами 1, 2, 3, 4, 5. Теперь в базе данных SQLite я хочу получить 2, 5 значения id в Android:

    String selectQuery = "SELECT  * FROM " + Table_STOCK + " 
          WHERE " + KEY_ID + " = '" + id + "'" ;
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

Из приведенного выше запроса я могу получать только по одному с одним идентификатором. Я хочу получить несколько столбцов с несколькими идентификаторами.

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

Reaz Murshed 18.04.2018 08:34

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

ADM 18.04.2018 08:35

Пожалуйста, обновите вопрос, указав более подробную информацию.

Dnyaneshwar Panchal 18.04.2018 08:37

это очень основы SQL, вам следует изучить его перед тем, как начать его использовать. Вы можете использовать WHERE id in (2,5) вместо WHERE id = 2

Vladyslav Matviienko 18.04.2018 08:42
get multiple coloumn также вы, вероятно, имеете в виду несколько строк
Vladyslav Matviienko 18.04.2018 08:43

Можете ли вы, пожалуйста, отправить запрос

sai android 18.04.2018 08:45
+ " WHERE " + KEY_ID + " in( '" + id1 + "','" + id2 +"')"
Vladyslav Matviienko 18.04.2018 08:47

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

Vladyslav Matviienko 18.04.2018 08:49
1
8
1 754
3

Ответы 3

Вот код, который нужно использовать для получения нескольких записей

  selectQuery = "SELECT  * FROM " + Table_STOCK + " WHERE " + KEY_ID + "='" + id2+ "' AND " + KEY_ID + " = '" + id5";

Есть несколько способов получить данные с помощью условия.

Но для этого вы должны подтвердить, что сколько строк вы должны получить

Rishabh Saxena 18.04.2018 08:57

Да, необходимо заранее определить, сколько строк он должен получить.

Praveen Rawat 18.04.2018 09:04

Ознакомьтесь с моим решением, и если оно вам покажется динамичным, тогда проголосуйте за :)

Rishabh Saxena 18.04.2018 09:06

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

Praveen Rawat 18.04.2018 09:09

Хорошо, но ответ всегда должен быть динамичным, чтобы, если в будущем кому-то понадобится решение, оно должно быть выгодным для всех.

Rishabh Saxena 18.04.2018 09:11

Спасибо @ShaifaliRajput

Rishabh Saxena 18.04.2018 09:21

Для этого можно использовать ключевое слово IN:

String commaSeparatedIds = "1, 2, 3, 4, 5";

String selectQuery = "SELECT  * FROM " + Table_STOCK + " 
                  WHERE " + KEY_ID + " IN (" + commaSeparatedIds + ")" ;

А вот небольшой вспомогательный метод для создания commaSeparatedString из списка идентификаторов без дополнительных библиотек:

private String toCommaSeparatedString(List<Integer> list) {
    if (list.size() > 0) {
        StringBuilder nameBuilder = new StringBuilder();
        for (Integer item : list) {
            nameBuilder.append(item).append(", ");
        }
        nameBuilder.deleteCharAt(nameBuilder.length() - 1);
        nameBuilder.deleteCharAt(nameBuilder.length() - 1);
        return nameBuilder.toString();
    } else {
        return "";
    }
}

Еще проще с общими библиотеками apache, как описано здесь: Java: объединить массив примитивов с разделителем (Но имейте в виду, что это иногда вызывает проблемы с Android <4.4)

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

public ArrayList<Object> getContent(ArrayList<String> list) {

        ArrayList<Object> objList = new ArrayList<>();
        if (list!=null && !list.isEmpty()){
            SQLiteDatabase db = getReadableDatabase();

            //Check for list items
            for(int i =0;i<list.size();i++) {

                Cursor cursor = db.query(Table_STOCK, null,
                        KEY_ID + " = ?",
                        new String[]{list.get(i)}, null, null, null, null);


                Object obj=null;

                if (cursor != null) {
                    cursor.moveToFirst();

                    // Set your object properties extracting from cursor
                    obj = new Object();
                    obj.setColumn1Property(cursor.getString(cursor.getColumnIndex(Table_STOCK.COLUMN_1)));
                    obj.setColumn2Property(cursor.getString(cursor.getColumnIndex(Table_STOCK.COLUMN_2)));
                }
                if (cursor != null) {
                    cursor.close();
                }
                //Add extracted object in your list.
            objList.add(obj);

            }
        }
        return objList;
        //Return rows list from your database. 
    } 

Другие вопросы по теме