Android SQLite更新将在应用重新启动时回滚

时间:2016-04-26 13:05:11

标签: android sqlite

我正在尝试对只包含1行的表执行更新。更新成功执行但是一旦我重新启动应用程序,更新就会回滚!
这是我的代码:

public void updateToken(String token) {
    System.out.println("DatabaseHandler.updateToken");
    System.out.println("Value of token: " + token);
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery("Select * from ui", null);
    String data = "";
    while(cursor.moveToNext()){
        for(int i= 0; i<cursor.getColumnCount(); i++) {
            data += cursor.getString(i) + " | ";
        }
        data += "\n";
    }
    Log.i("UI Table before update",data);

    ContentValues values = new ContentValues();
    values.put("gcmtoken", token);
    db.beginTransaction();
    int r = db.update("ui", values, "ui = ?", new String[]{"" + getUI()});
    System.out.println("Number of rows affected: " + r);
    System.out.println("Updated GCMToken in DB: " + getGCMToken());
    cursor = db.rawQuery("Select * from ui", null);
    data = "";
    while(cursor.moveToNext()){
        for(int i= 0; i<cursor.getColumnCount(); i++) {
            data += cursor.getString(i) + " | ";
        }
        data += "\n";
    }
    Log.i("UI Table after update",data);
    db.setTransactionSuccessful();
    db.endTransaction();
}

相应的输出会在每次启动应用时显示第一个Log.i()中的上一个令牌和第二个Log.i()中的新令牌。

1 个答案:

答案 0 :(得分:0)

您没有关闭与数据库的连接,也许实际上并没有写入数据。如果您没有明确关闭数据库连接,当您退出应用程序时,所有连接都将关闭,但这不能保证您成功存储数据。

db.close()行之后添加db.endTransaction()语句。

祝你好运!