我尝试使用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"};
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个值。