在android中的sqlite数据库中的onUpgrade

时间:2013-11-09 13:01:47

标签: android android-sqlite sqliteopenhelper

我正在开发一个数据库应用程序,我被困在一个地方。

场景是:我有一个数据库,我正在维护数据库的版本。 它与应用程序版本相同。

现在我在版本1中实现数据库。在版本1中创建了3个表。在版本2中,我通过添加一个表来升级数据库。因此,查询在升级()中。

现在,如果用户安装版本2该怎么办。由于没有数据库,因此不会调用onUpgrade()。因此,将调用onCreate(),结果是它将只创建3个表。

我想在onCreate()中显式调用onUpgrade()。但是stackoverflow上的许多开发人员都建议不要明确地调用它。

我完全陷入困境。

提前致谢。

1 个答案:

答案 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()
  • 对于每个新版本,您只需:
    • 增加DB_VERSION
    • 添加新的if (oldVersion < N) { // do the upgrade }部分。

信用:受到Head First Android Development,Dawn和David Griffiths,O'Reilly,2015的启发