处理有关更新的数据库版本的安卓



有没有关于如何在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);
        }
    }
}

谢谢

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

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


更新

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

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

Shameless Plug:我知道你已经解决了这个问题,但我正在研究一组开源的DSL,它可以很容易地创建SqliteOpenHelper/ContentProvider/Contract API,并通过迁移管理升级 http://robotoworks.com/mechanoid-plugin/mechanoid-db

仍然处于早期阶段,我正忙于编写文档,但是它已经对在Android中使用sqlite的任何人有用,使用它的人越多,:)

最新更新