0

有没有关于如何最好地处理 android 中的数据库升级的文档?

我正在开发一个应用程序,并一直在我自己的手机上对其进行测试。一切正常,在过去的几次部署中,我不得不向我的表中添加一些列,并且由于如果旧数据库版本低于某个数据库版本,则会执行升级语句。

但是,当我尝试在另一部手机上运行该应用程序时,由于没有以前的版本,因此会出现错误,因此未添加该列。

是否有关于如何处理数据库升级和版本控制的最佳实践或文档?我尝试在谷歌上搜索特定问题,但并没有带来很多好处。

这是我目前正在使用的相关代码:

private static final int DATABASE_VERSION = 11;

private static class LocalLoginDatabaseHelper extends SQLiteOpenHelper {
    LocalLoginDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(TAG,DATABASE_CREATE);
        db.execSQL(DATABASE_CREATE);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if(oldVersion < 11) {
            Log.d(TAG + "Upgrade",DATABASE_ALTER);
            db.execSQL(DATABASE_ALTER);
        }
    }
}

谢谢

4

2 回答 2

1

无耻插件:我知道你已经解决了这个问题,但我正在开发一组开源 DSL,它可以轻松创建 SqliteOpenHelper/ContentProvider/Contract API 并通过迁移管理升级http://robotoworks.com/mechanoid-plugin/机械人数据库

它还处于早期阶段,我正忙于编写文档,但它已经对在 Android 中使用 sqlite 的任何人有用,并且使用它的人越多,它就会变得更好:)

于 2012-09-20T12:53:14.877 回答
1

有没有关于如何最好地处理 android 中的数据库升级的文档?

使用SQLiteOpenHelper,它可以让您控制何时检测到架构更改,以便您可以升级数据库。


更新

但是,当我尝试在另一部手机上运行该应用程序时,由于没有以前的版本,因此会出现错误,因此未添加该列。

DATABASE_CREATE还需要有该列。对于新安装(或在用户对您的应用程序执行清除数据之后),没有现有数据库,因此调用onCreate(), not 。onUpgrade()

于 2012-09-20T11:57:54.257 回答