java - SQLite 事务未提交

标签 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;

最佳答案

“inTransaction true”暗示您有一个外部事务,该内部事务嵌套在该外部事务中。

在正在进行的事务中查询数据时一切正常。

Android sqlite 仅部分支持嵌套事务。最外层事务发生的情况决定了所有嵌套事务发生的情况。

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

关于java - SQLite 事务未提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33650856/

相关文章:

java - ScheduledThreadPoolExecutors 和自定义队列

java - 如何在 Intellij Idea 中找到所有未使用的类?

java - AWS 免费套餐使用

java - Android 欢迎界面等待时间太长?

android - 如何设置应用内结算项为已使用状态?

ios - iOS5、iOS6 Unicode 上的全文搜索(俄语、日语、中文、韩语)

java - jmeter:如何在java代码中设置现有jmx文件的线程数?

sqlite - SQLite 数据库中的不完整 SQL 错误

database - 如何将 MS Access 数据库 (.mdb) 文件转换为 Sqlite?

android - 如何使 Jetpack 撰写复选框四舍五入