Android 更新所有记录 SQLite

Android update all records SQLite

我的 table 包含 7 条记录。使用更新方法,我想更新具有 INTEGER 值的列。 使用 for 循环,我想用数字序列更新所有记录,但它似乎无法正常工作,因为所有记录都用循环的最后一个 (7) 更新。也许错误在 WHERE 子句中?谢谢你的建议。

SQLiteDatabase datab = new DatabaseHelper(getActivity()).getReadableDatabase();

ContentValues cv = new ContentValues();
for(int i = 1; i<8; i++){
    cv.put(MyTable.NUMERAZIONE, i);
    datab.update(MyTable.TABLE_NAME, cv, MyTable.NUMERAZIONE + "!="+i, null);
}
datab.close();

我也尝试过不使用 WHERE 子句,但我得到了相同的结果:

datab.update(MyTable.TABLE_NAME, cv, null, null);

记录有7条,我想更新所有记录,没有任何子句。

问题出在您的 whereClause 上。

MyTable.NUMERAZIONE + "!="+i

意味着它将更新所有不等于当前 i 值的记录(在这种情况下它将更新所有记录为值 i)。

编辑

datab.update(MyTable.TABLE_NAME, cv, null, null);

每次都会更新所有行,所以这不是解决方案。

我不是 sqlite 专家,但解决方案之一是获取所有行,遍历它,设置新的 i 值并更新数据库。

考虑 SQL,您调用 update() 后将成为 运行。让我们进行第一次迭代 (i = 1):

UPDATE table_name SET numerazione = 1 WHERE numerazione != 1

任何 numerazione 不为 1 的行都会将其设置为 1,因此结果是每一行都有 numerazione = 1。现在我们 运行 下一次迭代 (我 = 2):

UPDATE table_name SET numerazione = 2 WHERE numerazione != 2

任何 numerazione 不是 2 的行都将其设置为 2。但是在上一次迭代之后,所有行的 numerazione = 1,因此此语句将更新 所有 行。其余迭代发生相同的事情,最后一次将所有行的 numerazione 设置为 7。

您需要找到其他 WHERE 子句或其他方式来更新您的行。一种解决方案是使用 NOT IN 运算符构建 WHERE 子句,并每次都使列表变大。第一个是 NOT IN (1),第二个是 NOT IN (1,2),依此类推。由于您只需执行少量操作,因此性能不会太差。

private String buildWhere(int number) {
    StringBuilder builder = new StringBuilder(MyTable.NUMERAZIONE).append( "NOT IN (1");
    for (int i = 2; i <= number; i++) {
        builder.append(',').append(i);
    }
    builder.append(')');
    return builder.toString();
}
...
datab.update(MyTable.TABLE_NAME, cv, buildWhere(i), null);

这应该导致以下语句:

UPDATE table_name SET numerazione = 1 WHERE numerazione NOT IN (1)
UPDATE table_name SET numerazione = 2 WHERE numerazione NOT IN (1,2)
...
UPDATE table_name SET numerazione = 7 WHERE numerazione NOT IN (1,2,3,4,5,6)