我有以下SQLite查询:
ArrayList<Long> idList = new ArrayList<>();
// adding Long values to idList
SQLiteDatabase db = getReadableDatabase();
final String whereClause = COLUMN_DEVICE_ID + " IN (?)";
final String[] whereArgs = new String[]{TextUtils.join(", ", idList)};
Cursor cursor = db.query(TABLE_DEVICES, null, whereClause, whereArgs,
null, null, null);
执行此查询会导致空Cursor
。
似乎问题的原因是whereArgs
String
未插入whereClause
。
我调试了代码,发现mQuery
的{{1}}字段已初始化为以下内容:
Cursor
为什么SELECT * FROM table_devices WHERE device_id IN (?)
没有被?
取代?
提前致谢。
答案 0 :(得分:1)
解决了以下问题:
final String args = TextUtils.join(", ", ids);
final String whereClause = String.format(COLUMN_DEVICE_ID + " IN (%s)", args);
Cursor cursor = db.query(TABLE_DEVICES, null, whereClause,
null, null, null, null);
虽然我不确定这与?
+ whereArgs
方法(关于SQL注入)相比有多安全。