SQLite事务未提交

时间:2015-11-11 12:47:24

标签: java android sqlite commit

我在我的应用程序中使用SQLite 数据库工作正常 我可以插入,选择和更新行,但在这种情况下,事务不会被提交。

public int updateTransaction(String oldstatus, String newstatus) {
    int result;
    try {
        mDB.beginTransaction();
        ContentValues values = new ContentValues();
        values.put("trx_status", newstatus);
        result = mDB.update("transaktion", values, "trx_status = ?", new String[] { oldstatus });
        Log.d("DB", "updateTransaction:number of updated rows:" + result);
        mDB.setTransactionSuccessful();
    } catch (SQLiteException e) {
        Log.d("TAGAB", "Error:" + e.getLocalizedMessage());
        result = -1;
    } finally {
        mDB.endTransaction();
    }

    Log.d("TAGAB", "in Transaction? " + mDB.inTransaction());
    return result;
}

在LogCat中:

"TAGAB" in Transaction? true

最初执行更新,如果我选择行,则会收到具有新状态的行。

关闭应用程序并再次启动后,行再次具有旧状态!
交易是否回滚?如果是这样,为什么? 数据库定义为单例。

private SQLiteDatabase mDB;
private static DatabaseAdapter INSTANCE;

1 个答案:

答案 0 :(得分:1)

“inTransaction true”提示你有一个外部事务,这个内部事务嵌套在这里。

在正在进行的交易中查询数据时,一切正常。

Android sqlite只对嵌套事务提供部分支持。最外层事务发生的事情决定了所有嵌套事务发生了什么。

在您的情况下,最外层的事务将被回滚,嵌套事务中的任何更改也会回滚。