【发布时间】:2013-12-01 18:20:19
【问题描述】:
提前致谢。
我需要在我的应用程序的新版本中重新构建我的数据库,然后为此目的在我的 SQLiteOpenHelper 类中使用 onUpgrade 方法。
好吧,我需要重命名一些列,而在 sqlite 中这是不可能的,我决定创建另一个表,导入所有数据,然后删除旧表并重命名新表。全部在“onUpgrade”方法中......好吧,在方法结束时我需要将数据库上传到服务器,当我走思考表时,我发现游标返回空指针,因为它没有找到新字段,但实际上当我去 DDMS 中的文件资源管理器并从我的手机查看数据库,我看到里面有字段。 似乎没有提交更改,但我为此使用了 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。
请帮帮我!!非常感谢。
【问题讨论】:
-
您的描述暗示数据库已升级,但未上传。
-
哦,好吧......我没有正确解释,我将使用“无意义”代码编辑我的答案。谢谢。
标签: android database sqlite commit