SQLite事务失败

时间:2013-08-18 11:38:35

标签: android sqlite

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

1 个答案:

答案 0 :(得分:3)

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

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

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

(如果你得到一个例外,那么吞下它是一个坏主意;整个函数必须失败。)