Android更新所有记录SQLite
我的表包含7条记录。使用更新方法,我想更新具有INTEGER值的列。 与一个for循环,我想用数字序列更新所有记录,但它似乎无法正常工作,因为所有记录都用循环的最后一个更新(7)。也许错误在WHERE子句中?谢谢你的建议。Android更新所有记录SQLite
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,我想更新的所有记录,没有任何条款。
考虑一下您的电话号码update()
将运行的SQL。让我们第一次迭代(I = 1):
UPDATE table_name SET numerazione = 1 WHERE numerazione != 1
任何行,其中numerazione
不是1将其设为1,这样的结果是,每行都有numerazione
= 1。现在我们运行下一次迭代(I = 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);
这应导致下列语句:在SQL
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)
如果我提供的代码可以帮助你,也许考虑标记这个答案。 – Karakuri
问题在于你的whereClause。
MyTable.NUMERAZIONE + "!="+i
意味着它将更新所有不等于当前i值的记录(在这种情况下,它会将所有记录更新为值i)。
编辑
datab.update(MyTable.TABLE_NAME, cv, null, null);
也将每一次更新所有行,所以它不是一个解决方案。
我不是sqlite的专家,但其中一个解决方案是获取所有行,遍历它,设置新的i值并在db上更新。
AFAIK “不等于” 是'','未='。 – m0skit0