提问者:小点点

Android SQLite rawQuery-如何选择表的多行


我尝试使用rawQuery返回一个游标,其中包含要传递到它的几行不同的数据。 当只有一个参数时,它是有效的。 当有一个以上的参数时,它显示空的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);

当代码工作时,selectedRecipesSQL将类似于:

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);

我可能会使用for循环来生成正确的WHERE“_id=?” 然后使用字符串数组:

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

共2个答案

匿名用户

                    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);

匿名用户

一种方法是将_id的可能值作为1个字符串传递,这是一个逗号分隔的列表,如下所示:

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

并在查询中使用运算符like:

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

这也只适用于1个值。