我创建了一个Android应用程序,在启动时检查是否有新版本的应用程序.如果是,则应用程序下载新的apk文件并过度安装新的apk.我的应用程序使用sqlite db.但是这个db,从一个版本到另一个版本都可以改变.我想我必须使用这个方法:
onUpgrade()
Run Code Online (Sandbox Code Playgroud)
但我不确切知道如何使用它.
当我启动应用程序时,我将此代码用于克里特数据库(如果不存在):
DbHelper mDHelper = new DbHelper(context, DB_NAME, null, DB_VERSION)
Run Code Online (Sandbox Code Playgroud)
如果我想使用onUpgrade()方法,我应该改变什么?我什么时候打电话给它?
Mar*_*ski 19
onUpgrade() 当数据库版本发生变化时,调用(你不会自己调用),这意味着基础表结构发生变化等.
一般来说,这意味着操作系统告诉你" 嘿,你问过数据库结构版本10但是我发现我们在这里找到了更旧的东西,所以你有机会在开始使用数据库之前修复它(并且可能因结构不匹配而崩溃) ".
在那个方法中,你应该做所有必要的事情,好吧..升级旧数据库的结构,以构建匹配当前版本要求,如添加/删除列,转换行内容,甚至完全删除旧数据库并从头开始创建 - 适用于Android你在这里做什么并不重要 - 这只是你的代码执行必要工作(如果有的话)的紧急回调.您需要注意用户可能不会经常更新,因此您必须始终处理从版本X到Y的升级,因为X可能不等于ie(Y-1).
如果您正在使用SQLiteOpenHelper,则每当您更改数据库版本时都会调用onUpgrade.还有一个额外的要求.数据库名称必须保持不变.
Old Version:
dbName = "mydb.db"
dbVersion = 1
New Version:
dbName = "mydb.db"
dbVersion = 2
Run Code Online (Sandbox Code Playgroud)
在内容提供程序的onCreate中,您创建了一个采用这些参数的SQLiteOpenHelper实例.您的SQLiteOpenHelper实现如下所示:
public static final class MySQLiteOpenHelper extends SQLiteOpenHelper {
public MySQLiteOpenHelper(Context context, int dbVersion, String dbName) {
super(context, dbName, null, dbVersion);
}
@Override
public void onCreate(SQLiteDatabase db) {
//Code to create your db here
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Code to upgrade your db here
}
}
Run Code Online (Sandbox Code Playgroud)
当您更改表或在数据库中添加更多表时,也会调用它
| 归档时间: |
|
| 查看次数: |
22316 次 |
| 最近记录: |