有没有关于如何在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的任何人有用,使用它的人越多,:)