Android SQLite Alter表重命名不提交

时间:2013-11-18 14:43:24

标签: android database sqlite commit

提前致谢。

我需要在我的应用程序的新版本中重新构建我的数据库,然后在我的SQLiteOpenHelper类中使用onUpgrade方法来实现此目的。

好吧,我需要重命名一些列,以及如何在sqlite中不可能我决定创建另一个表,导入所有数据然后删除旧表并重命名de new table。全部采用“onUpgrade”方法......好吧,在方法结束时我需要将数据库上传到服务器,当我走向思考表时,我发现游标返回nullpointer,因为它没有找到新字段,但事实上当我去DDMS的de file explorer并从我的手机查看数据库我看到里面的字段。 似乎更改没有提交,但我为此目的使用databasetransaction。

我做错了什么?

我在onupgrade中的代码似乎是这样的:

public void onUpgrade(final SQLiteDatabase db, int oldVersion, int newVersion) {

if(oldVersion==22 && newVersion==23){

try {
   db.beginTransaction();

   db.execSQL("CREATE TABLE unidades2 (uuid text, nombre TEXT)");

   c=db.rawQuery("SELECT * FROM unidades",null);
   c.moveToFirst();
   while(!c.isAfterLast()){
         auxuuid=new uuid().toString();
         db.execSQL("INSERT INTO unidades2(uuid, nombre) VALUES (?,?)",new String[] {auxuuid,c.getString(1)});
         c.moveToNext();
   }
   c.close();
   db.execSQL("DROP TABLE unidades");
   db.execSQL("ALTER TABLE unidades2 RENAME TO unidades");

   db.setTransactionSuccessful();
}
finally db.endTransaction();

}
}

然后用光标穿过unidades表,然后执行:

try {
   db.beginTransaction();

   Cursor cursor = db.rawQuery("SELECT * FROM unidades",null);
   cursor.moveToFirst();
   int hasuuid= cursor.getColumnIndex("uuid");
   cursor.close();

   [Code uploading database in JSON]

   db.setTransactionSuccessful();
}
finally db.endTransaction();

hasuuid -1。

请帮帮我!!非常感谢。

1 个答案:

答案 0 :(得分:1)

可能导致问题的一个问题虽然在您发布的代码段中不明显:onUpgrade()已在事务中运行。 sqlite本身不支持嵌套事务。顶部的Android包装器添加了部分支持,因此只有在提交或回滚最外层事务时,才会提交或回滚嵌套事务。在这种情况下,最外层的事务是调用onUpgrade()之前设置的事务。因此,当您认为提交时,不会在sqlite数据库级别上执行实际提交。