带选择参数的SQLite查询

时间:2016-10-05 09:37:25

标签: android sqlite android-sqlite

我有以下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 (?) 没有被?取代?

提前致谢。

1 个答案:

答案 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注入)相比有多安全。