我正在使用带有事务的contentvalues进行sqlite插入。以下代码不会生成任何异常,但未插入数据。
我是否想念一些事?感谢。
public boolean addRecord(Rec rec) {
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
ContentValues values = new ContentValues();
values.put(KEY_ID, rec.get());
// Inserting Row
try {
db.insertOrThrow(TABLE_RECORDS, null, values);
} catch (SQLException e) {
e.printStackTrace();
}
db.endTransaction();
db.close();
return true;
}
答案 0 :(得分:3)
调用beginTransaction后,必须调用setTransactionSuccessful以确保提交事务。如果没有该调用,则会回滚事务中的任何更改。
db.beginTransaction();
try {
...
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
这种特殊结构可确保实际数据库代码中的任何异常都会导致回滚。
(如果你得到一个例外,那么吞下它是一个坏主意;整个函数必须失败。)