在android上的sqlite中基于id更新多行?

时间:2017-03-20 05:46:47

标签: java android sqlite

我有db表如下

sqlite table

我想将状态列更新为1,ID = 1,2,3。

对于单行,我可以使用内容值

进行更新
public void updateJobStatus(int callId) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues data = new ContentValues();
    data.put(AppDBConstants.KEY_JOB_DETAIL_STATUS, 1);
    db.update(AppDBConstants.TABLE_JOB_DETAIL, data, AppDBConstants.KEY_JOB_DETAIL_CALL_ID + "=" + callId, null);
    db.close();
}

如何处理多行?

3 个答案:

答案 0 :(得分:4)

像这样更新您的查询

db.update(AppDBConstants.TABLE_JOB_DETAIL, data, AppDBConstants.KEY_JOB_DETAIL_CALL_ID + " IN (?,?,?)", new String[]{"1","2","3"});

答案 1 :(得分:2)

当你有不明数量的参数时,试试这个

String args = TextUtils.join(", ", arrayOfIds);

db.execSQL(String.format("UPDATE %s SET %s = true WHERE %s IN (%s);", 
    TABLE_INCOMING_MESSAGES, KEY_MESSAGE_SENT, KEY_ID, args));

答案 2 :(得分:1)

我认为您当前的代码适用于多个ID,但需要进行一些更改,以达到您的要求:

public void updateJobStatus(int[] callIds) {
    SQLiteDatabase db = this.getWritableDatabase();
    if (db != null) {
        db.beginTransaction();
        try {
             for(int id : callIds){
                 ContentValues data = new ContentValues();
                 data.put(AppDBConstants.KEY_JOB_DETAIL_STATUS, 1);
                 db.update(AppDBConstants.TABLE_JOB_DETAIL, data, AppDBConstants.KEY_JOB_DETAIL_CALL_ID + "=" + id, null);
              }
             db.setTransactionSuccessful();
        } finally {
            db.endTransaction();
        }
    db.close();
    }
}

注意:如上所述,您需要传递id数组,它可能是一个或多个。