我正在尝试使用 query() 函数在 Android 中的 SQLiteDatabase 上执行查询。我想在 SelectionArgs[] 中传递参数,但是当我使用 IN 语句时,它似乎没有替换“?”具有正确的论点。
我的查询如下所示:
temp = database.query(TABLE_NAME_ENTRIES,
new String[] {"_id", "Entry", "Summary"},
"_id IN ( ? )",
new String[] {ids}, null, null, null);
结果是一个空的光标。调试给我的信息是执行的查询使用了语句“_id IN (?)”,表明它似乎没有替换“?”正如预期的那样。当我将查询更改为
temp = database.query(TABLE_NAME_ENTRIES,
new String[] {"_id", "Entry", "Summary"},
"_id IN ( " + ids + " )",
null, null, null, null);
相反,我得到了预期的结果。
我在这个问题上真的很愚蠢,你知道我做错了什么吗?
最佳答案
您可以使用这样的解决方法 - 创建一个使用 ?
和 ,
动态生成字符串的方法,并将其放入查询中,如下所示:
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();
}
}
附注我认为您的查询中问号前后的空格可能是错误的,但我没有测试它,所以我不能 100% 确定
关于android - 使用括号和 ? Android中的SQLite数据库查询(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30365392/