我正在尝试对只包含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()
中的新令牌。
答案 0 :(得分:0)
您没有关闭与数据库的连接,也许实际上并没有写入数据。如果您没有明确关闭数据库连接,当您退出应用程序时,所有连接都将关闭,但这不能保证您成功存储数据。
在db.close()
行之后添加db.endTransaction()
语句。