提前致谢。
我需要在我的应用程序的新版本中重新构建我的数据库,然后在我的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。
请帮帮我!!非常感谢。
答案 0 :(得分:1)
可能导致问题的一个问题虽然在您发布的代码段中不明显:onUpgrade()
已在事务中运行。 sqlite本身不支持嵌套事务。顶部的Android包装器添加了部分支持,因此只有在提交或回滚最外层事务时,才会提交或回滚嵌套事务。在这种情况下,最外层的事务是调用onUpgrade()
之前设置的事务。因此,当您认为提交时,不会在sqlite数据库级别上执行实际提交。