批量更新数据库

JPM*_*JPM 2 sqlite android database-update bulkupdate

我一直在这个网站上看一段时间,但没有找到答案.我正在尝试对我知道已经在表中的数据进行批量更新.当某个条件返回行ID时,我需要设置一列.这是单一方法,但我想提高效率,并将其作为批量处理.我们的数据库不在Provider中,因此我只使用Helper类.

public void markUnavailable(int myId) {
    SQLiteDatabase db = this.getWritableDatabase();
    String sql = "UPDATE " + MYTABLE + " SET " + Col.IS_AVAILABLE + "= 0"+ " WHERE " + Col.MY_ID + "=" + myId;
    db.execSQL(sql);
    db.close();
}
Run Code Online (Sandbox Code Playgroud)

我想传入一组myIds来进行批量更新.我无法执行Insert或Replace语句,因为我无法访问所有列数据,并且由于代码更改太多而不希望通过它.

public void markUnavailable(int[] myId) {
   // ????
   /// need some way to loop through and update in bulk
}
Run Code Online (Sandbox Code Playgroud)

Com*_*are 8

尝试UPDATE tablename SET column=0 WHERE ID IN (...),其中...是逗号分隔的ID值列表.


LS_*_*ᴅᴇᴠ 7

我不是Android开发人员,但根据良好的数据库实践,您应该:

public void markUnavailable(int[] myId) { 
    SQLiteDatabase db = this.getWritableDatabase();
    db.beginTransaction();
    SQLiteStatement upd=db.compileStatement("UPDATE "+MYTABLE+" SET "+Col.IS_AVAILABLE+"=0 WHERE "+Col.MY_ID+"=?";
    for (int i = 0; i < myId.length; i++) { 
        upd.bindLong(1, myId[i]);
        upd.execute();
    }
    db.endTransaction();
}
Run Code Online (Sandbox Code Playgroud)

Android SQLiteDatabase.update在这种情况下会非常有用,但String [] whereArgs不会很好地处理你的问题int[] myId.