android - 带有选择参数的 SQLite 查询

标签 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 中。

我调试了代码并注意到 CursormQuery 字段被初始化为以下内容:

SELECT * FROM table_devices WHERE device_id IN (?)

为什么 ? 没有被 whereArgs 替换?

提前致谢。

最佳答案

解决了以下问题:

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

关于android - 带有选择参数的 SQLite 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39870437/

相关文章:

android - Gradle 多字符串值文件

android - 如何在 Android 上创建电子邮件按钮?

sqlite - 如何在 xamarin 中浏览 sqlite 数据?

sql - node-sqlite3序列化失败: SQLITE_CONSTRAINT: foreign key constraint failed

android - 如何检查应用程序是否在 BroadcastReceiver 的前台后台运行

java - Android - 将 Canvas /位图拉伸(stretch)至全屏宽度

android - 在 SharedPreferences 中保存我的数据库版本

android - SQLite 异常 : Unrecognized token when reading from database

java - 安卓 : How to retrieve specific column in spinner from Sqlite

java - 空对象引用上的 SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[])'