【问题标题】:Android SQLite update column using an Array使用数组的 Android SQLite 更新列
【发布时间】:2015-03-11 19:46:23
【问题描述】:

考虑以下 SQLite 表

下面的 sn-p 代码用于在 “位”位置更新 ,效果很好。

SQLiteDatabase db = myDbHelper.getReadableDatabase();

ContentValues values = new ContentValues();
values.put("value", "1");

db.update("registro_status", values, "bit=1", null);

如何使用像

这样的数组一次设置整个“value”列

String[] valuearray = {"1","0","1","0","1","0","1","0","1","0","1","0","1","0","1"};

?

【问题讨论】:

  • 如果你想同时更新所有行,首先你需要获取一个数组中的所有位,然后在for循环中执行更新查询,

标签: java android arrays sqlite


【解决方案1】:

基本上你不能。但是,您可以通过使用一个事务上下文来加快插入速度:

SQLiteDatabase db = myDbHelper.getReadableDatabase();
ContentValues values = new ContentValues();

db.beginTransaction(); 

try{
    int bit = 1;

    for (String value: valuearray) {
        values.put("value", value);
        db.update("registro_status", values, "bit=" +bit++, null);
    }

    db.setTransactionSuccessful();

} catch(Exception e) {
    Log.e(“Error in transaction”, e.toString());

} finally {
    db.endTransaction();
}

这通常比逐条插入要快得多。

或者,如果您对 SQL 感到满意,您可以实现 INSERT 语句:

String sql = "INSERT OR REPLACE INTO registro_status (bit, value) VALUES ";
int    bit = 1;

for (String value: valuearray) {
    sql = sql+ "("+ bit +", " +value +"),";
}

// cut last comma and add semi colon
sql = sql.substring (0, sql.length() -1) +";";

db.execSQL(sql);

p.s.:请注意上面的更新 - 我忘记了 update ;)

【讨论】:

  • 感谢您的帮助。不幸的是,使用您的事务上下文代码不会返回任何错误,也不会在数据库上写入任何内容。
  • 伙计们请不要那个位像行的主键,它不像 1, , 3 .. 非负整数。读一次我的第一条评论@Machado
  • 请查看我上面的更新;我忘了调用update - 那不起作用。
  • 哦,快。愚蠢的错误!再次感谢您。
  • 确实:D 如果您愿意,我为第二个制作了小提琴:sqlfiddle.com/#!5/69ebf/1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多