2015-11-11 1 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 

Обновления сначала предварительно, и, если я выбираю строки, я получаю строки с новым статусом.

После того, как приложение закрыто и снова запущено, строки снова имеют старый статус!
Является ли транзакция откатанной? Если да, то почему? База данных определяется как singleton.

private SQLiteDatabase mDB; 
private static DatabaseAdapter INSTANCE; 

ответ

1

«inTransaction правды» намекает, что у вас есть внешняя транзакция, где эта внутренняя транзакция вложена в.

Все отлично работает при запросе данных в рамках текущей транзакции.

Android-приложение sqlite имеет лишь частичную поддержку вложенных транзакций. Что происходит с внешней транзакцией, решает, что происходит со всеми вложенными транзакциями.

В вашем случае внешняя транзакция откатется и любые изменения вложенных транзакций также откатываются.

+0

Спасибо за быстрый ответ! Я не совершал никаких других транзакций. Это единственная транзакция. – slawek

+0

Затем внешняя транзакция запускается чем-то другим - откуда вы вызываете этот метод? – laalto

+0

Этот метод вызывается из любой активности после нажатия сохранить щелкают: DatabaseAdapter да = DatabaseAdapter.getInstance (нуль, dummyPassword "); INT результат = da.updateTransaction (" U», "Т"); // строки успешно updatet – slawek

Смежные вопросы