【问题标题】:Sqlite UPDATE with parameterised IN (...) clause [duplicate]带有参数化 IN (...) 子句的 Sqlite UPDATE [重复]
【发布时间】:2013-02-07 18:21:50
【问题描述】:

在我的应用程序中,我正在使用 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。我错过了什么?

【问题讨论】:

标签: android sqlite


【解决方案1】:

我不乐意推荐 使用参数,但在这种情况下,它实际上比格式化所有 ? 标记更容易(并且使用纯整数,同样安全):

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 2011-03-07
      • 2023-03-19
      • 2010-10-13
      • 2010-11-21
      • 1970-01-01
      • 2010-12-17
      • 2010-09-25
      相关资源
      最近更新 更多