我正在尝试在我的Android应用程序中更新我的数据库。当我更新版本号时,会调用onUpgrade,但版本号不会增加,因此每次访问数据库时都会调用onUpgrade。这是我的代码:
private final static int DB_VERSION = 8;
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
this.myContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "in onCreate");
try {
copyDataBase();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(TAG, "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion);
myContext.deleteDatabase(DB_NAME);
Log.d(TAG, "the version is " + db.getVersion());
db.setVersion(newVersion);
Log.d(TAG, "the version is " + db.getVersion());
onCreate(db);
}
任何人都知道为什么会这样吗?
答案 0 :(得分:2)
请勿尝试手动设置版本。 (这都是照顾的。)
不要尝试删除数据库。你正在升级它,你应该不会真的感到惊讶的是,手动设置你刚刚删除的数据库版本效果不佳。
您在onUpgrade
中应该做的就是对表格结构进行必要的更改。如果你想通过删除当前表(不是数据库)然后重新创建它们来做到这一点,那就没关系。
如果您需要保留表格中的数据,请查看此问题以获取有关如何执行此操作的建议: Upgrade SQLite database from one version to another?
答案 1 :(得分:0)
我最后在assets文件夹中添加了另一个数据库。我知道它不是最好的解决方案,但它确实有效。这次应用程序升级后,它只会写新数据库 - 它有一个新名称 - 而不是旧名称。我检查旧的是否存在,如果存在,我将其删除。