带参数化IN(...)子句的Sqlite UPDATE

时间:2013-02-07 18:21:50

标签: android sqlite

在我的应用程序中,我正在使用sqlite数据库 - 我遇到了一个奇怪的问题。

我有一个看起来像这样的表:

_id   field1   field2   status
---   ------   ------   ------
 1    value    value    ...
 2    value    value    ...
...

在一个地方,我需要更新一些行以将它们设置为另一个状态,所以我正在尝试

SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("status", STATUS_SENT);
Set<Integer> ids = datasource.getCompletedIds();
String idparam = TextUtils.join(",", ids);
int cnt = db.update(TABLE_ORDERS, cv, "_id in (?)", new String[] { idparam });
Log.d("db", "updated " + cnt + " rows");
db.close();

然而,没有任何内容得到更新 - db.update返回0.我缺少什么?

2 个答案:

答案 0 :(得分:5)

我不乐意推荐使用参数,但在这种情况下,它实际上比格式化所有?标记更简单(并且使用普通整数,同样安全):< / p>

db.update(TABLE_ORDERS, cv, "_id IN (" + idparam + ")", null);

答案 1 :(得分:1)

很遗憾,您必须为中的每个 ID列出一个插入字符? ...
一个流行的解决方法是编写一个快速实用程序,根据Set的大小添加适当数量的?