0

我正在使用带有事务的 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;
}
4

1 回答 1

3

调用beginTransaction后,您必须调用setTransactionSuccessful以确保事务被提交。如果没有该调用,事务中的任何更改都会回滚。

db.beginTransaction();
try {
  ...
  db.setTransactionSuccessful();
} finally {
  db.endTransaction();
}

这种特殊的结构确保了实际数据库代码中的任何异常都会导致回滚。

(如果遇到异常,吞下它是个坏主意;整个函数必须失败。)

于 2013-08-18T11:49:05.497 回答