Android SQLite rawQuery - Как выбрать несколько строк в таблице - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь использовать rawQuery для возврата курсора с несколькими разными строками данных, которые нужно передать ему. Когда есть только 1 аргумент, он работает. Если аргументов больше 1, отображается пустое состояние ListView. Я считаю, что проблема здесь:

// Query for items from the database and get a cursor back. Edited code for clarity:
        recipeCursor = db.rawQuery("SELECT  course, name, _id " +
                " FROM recipes WHERE _id = ?",
                selectedRecipesSQL);

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

String[] selectedRecipesSQL;
selectedRecipesSQL = new String[]{"2"};

И когда он не работает, это будет что-то например,

String[] selectedRecipesSQL;
selectedRecipesSQL = new String[]{"2 OR 5"};

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

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

recipeCursor = db.rawQuery("SELECT  course, name, _id " +
                " FROM recipes WHERE _id = ? OR _id = ? OR _id = ?",
                selectedRecipesSQL);

Я бы, наверное, используйте a для l oop, чтобы сгенерировать правильное количество WHERE "_id =?" а затем используйте массив строк:

selectedRecipesSQL = new String[]{"2", "5"};

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Один из способов сделать это - передать возможные значения _id в виде 1 строки, которая представляет собой список, разделенный запятыми, например:

selectedRecipesSQL = new String[]{"1,2,3"};

, а в вашем запросе используйте оператор LIKE:

recipeCursor = db.rawQuery(
  "SELECT course, name, _id FROM recipes WHERE ',' || ? || ',' LIKE '%,' || _id || ',%'",
  selectedRecipesSQL
);

Это работает также только для 1 значения.

0 голосов
/ 17 июня 2020
                    static String multiply__concat_string(String text,String joiner_,int multiple_)
                    {
                        String output="";
                        for(int i=0;i<multiple_;i++)
                        {
                            output+=(text+joiner_);
                        }
                        if(output.length()>0)
                        {
                            output=output.substring(0,output.length()-1);
                        }
                        return output;
                    }

Используйте это так:

selectedRecipesSQL = new String[]{"2", "5"};
                    db.rawQuery("SELECT  course, name, _id " +
                    " FROM recipes WHERE _id IN("+multiply_concat_string("?",",",selectedRecipesSQL.length)+")",
                    selectedRecipesSQL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...