我正在尝试为任意数量的行更新一列。
这是功能:
public void setAwardsSyncComplete(String[] ids) {
String inArray = StringUtils.separateCommas(ids);
db.beginTransaction();
try {
ContentValues contentValues = new ContentValues();
contentValues.put(COL_SYNCED, true);
int rowsAffected = db.update(TABLE, contentValues, COL_ID + " IN (" + inArray + ")", null);
} catch (Exception e) {
DebugLog.e("Error in transaction", e.toString());
} finally {
db.endTransaction();
}
}
奇怪的是rowsAffected正确返回(即rowsAffected> 0),但列值保持 null 。
我在这里忽略了一些非常简单的事情吗?
感谢。
答案 0 :(得分:8)
在使用事务时,需要调用db.setTransactionSuccessful();在try子句的末尾。如果没有这个,更新将被回滚。
请参阅SQLiteDatabase.beginTransaction
希望这有帮助,
Phil Lello
答案 1 :(得分:2)
您需要在db.setTransactionSuccussful()
之后致电db.update
,否则当您致电endTransaction()
时,任何更改都会被回滚。
答案 2 :(得分:1)
sqlite表中没有明确的布尔类型? 您要更新的COL_SYNED列是什么数据类型?
您将需要调用db.setTransactionSuccussful()
答案 3 :(得分:0)
我认为您的更新存在问题..
你需要循环你的数组并逐个更新..
private int _rowsAffected;
foreach (var a in inArray)
{
_rowsAffected= db.update(TABLE, contentValues, COL_ID + " = (" + a +")", null);
}
db.Commit();
db.setTransactionSuccussful();
if(_rowsAffected > 0)
//Success
此致