我正在尝试使用query()函数在Android上的SQLiteDatabase上执行查询。我想在SelectionArgs []中传递参数,但是当我使用IN语句时,它似乎不能替换'?'用正确的论点。
我的查询如下:
temp = database.query(TABLE_NAME_ENTRIES,
new String[] {"_id", "Entry", "Summary"},
"_id IN ( ? )",
new String[] {ids}, null, null, null);
它会导致一个空的Cursor。 Debug给出了执行查询使用语句“_id IN(?)”的信息,表明它似乎没有替换'?'正如所料。当我将查询更改为
时temp = database.query(TABLE_NAME_ENTRIES,
new String[] {"_id", "Entry", "Summary"},
"_id IN ( " + ids + " )",
null, null, null, null);
相反,我得到了预期的结果。
我真的很愚蠢这个问题,任何想法我做错了什么?
答案 0 :(得分:0)
您可以使用这样的解决方法 - 创建一个方法,使用?
和,
动态生成您的字符串,并将其放入查询中,如下所示:
String[] ids = { "id1", "id2" }; // do whatever is needed first
String query = "SELECT * FROM table"
+ " WHERE _id IN (" + makePlaceholders(ids.length) + ")";
Cursor cursor = mDb.rawQuery(query, ids);
String makePlaceholders(int len) {
if (len < 1) {
// It will lead to an invalid query anyway ..
throw new RuntimeException("No placeholders");
} else {
StringBuilder sb = new StringBuilder(len * 2 - 1);
sb.append("?");
for (int i = 1; i < len; i++) {
sb.append(",?");
}
return sb.toString();
}
}
P.S。我认为你的查询中问号前后的空格可能是错误的,但我没有测试它,所以我无法100%确定