我正在开发一个数据库应用程序,我被困在一个地方。
场景是:我有一个数据库,我正在维护数据库的版本。 它与应用程序版本相同。
现在我在版本1中实现数据库。在版本1中创建了3个表。在版本2中,我通过添加一个表来升级数据库。因此,查询在升级()中。
现在,如果用户安装版本2该怎么办。由于没有数据库,因此不会调用onUpgrade()。因此,将调用onCreate(),结果是它将只创建3个表。
我想在onCreate()中显式调用onUpgrade()。但是stackoverflow上的许多开发人员都建议不要明确地调用它。
我完全陷入困境。
提前致谢。
答案 0 :(得分:0)
我知道这是一个老帖子,你肯定找到了一个解决方案,但我觉得问题有效(upvoted),因为它没有得到答案,这里是我的2美分:
从onUpgrade()
调用onCreate()
应该有效(我没有对其进行测试),但是有一种更好的方法可以组织你的帮助(请参阅下面的代码段)。关键是这两种方法都只是入口点。
public class SampleDBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "mydatabase";
private static final int DB_VERSION = 2;
public SampleDBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
updateDatabase(db, 0, DB_VERSION);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
updateDatabase(db, oldVersion, newVersion);
}
private void updateDatabase(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 1) {
// Create 3 initial tables
}
if (oldVersion < 2) {
// Create the new table
}
}
}
这种助手的优点:
onCreate()
和onUpgrade()
方法,只需更改updateDatabase()
。if (oldVersion < N) { // do the upgrade }
部分。信用:受到Head First Android Development,Dawn和David Griffiths,O'Reilly,2015的启发