2015-11-11 59 views
1

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

的“在inTransaction真正的”暗示,你有这个地方事务内嵌套在。

一切正在进行的事务中查询数据时,正常工作的外部事务。

Android的SQLite只有部分支持嵌套事务。最外层的事务会发生什么,决定了所有嵌套的事务会发生什么。

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

+0

感谢您的快速回答!我没有任何其他交易开始。这是单笔交易。 – slawek

+0

然后外面的交易是由别的东西开始 - 你在哪里调用方法? – laalto

+0

此方法是从任何活动称为保存按钮之后被点击: DatabaseAdapter DA = DatabaseAdapter.getInstance(NULL,dummyPassword “); INT结果= da.updateTransaction(” U”, “T”); // 的行已成功更新 – slawek