安装较新/现有版本的应用程序时,会创建SQLite数据库而不是重用 - 现有数据库将消失。
以下是我的课程
class HDDBAdapter {
int DB_LOCA_VERSION = 1;
HDDBOpenHelper hdHelper;
HDDBAdapter(_ctxt) {
hdHelper = new HDDBOpenHelper(_ctxt, "mydb.db", null, DB_LOCA_VERSION);
}
open() {
try {
db =hdHelper.getWritableDatabase();
}
catch ...
}
static class HDDBOpenHelper extends SQLiteopenHelper {
public HunyDewDBOpenHelper(Context ct, String n, CursorFactory cf, int v) {
super(ct, n, cf, vv);
}
private static final String DB_CREATE_BOX = "create table " + "mydb.db" + "("
+ ... + ");";
public void onCreate(SQLiteDatabase arg0) {
arg0.setVersion(DB_LOCA_VERSION);
arg0.execSQL(DB_CREATE_BOX);
}
public void onOpen(SQLiteDatabase db) {
// TODO Auto-generated method stub
super.onOpen(db);
}
HDDBAdapter(_ctxt) {
hdHelper = new HDDBOpenHelper(_ctxt, "mydb.db", null, DB_LOCA_VERSION);
}
open() {
try {
db =hdHelper.getWritableDatabase();
}
catch ...
}
static class HDDBOpenHelper extends SQLiteopenHelper {
public HunyDewDBOpenHelper(Context ct, String n, CursorFactory cf, int v) {
super(ct, n, cf, vv);
}
private static final String DB_CREATE_BOX = "create table " + "mydb.db" + "("
+ ... + ");";
public void onCreate(SQLiteDatabase arg0) {
arg0.setVersion(DB_LOCA_VERSION);
arg0.execSQL(DB_CREATE_BOX);
}
public void onOpen(SQLiteDatabase db) {
// TODO Auto-generated method stub
super.onOpen(db);
}
我第一次运行应用程序时 - 应用程序使用我的输入创建数据库。然后我加载了一个较新版本的应用程序 - }
保持不变。在较新的版本中,它是与更改的数据库无关的逻辑。
所以我首先“强制停止”应用程序(不执行“清除数据”),然后卸载应用程序。现在我运行较新的版本 - 这个较新的版本不使用现有的数据库 - 它创建一个新的版本。这是为什么?我想使用现有的数据库。如果我在这里遗漏了什么,请告诉我。任何线索/指针/问题都会有所帮助。
当我安装它时显然在 DB_LOCA_VERSION
内失败,所以 - getWritableDatabase
首先被调用 - 在 onCreate
之前。请注意, onOpen
的构造函数在应用版本中保持不变 - 所以它不应该获得现有“mydb.db”的 HDDBAdapter
吗?并且没有 hdHelper
导致 getWritableDatabase
被调用。
谢谢
答案 0 :(得分:5)
所以我首先“强制停止”应用程序(不执行“清除数据”),然后卸载应用程序。现在我运行较新的版本 - 这个较新的版本不使用现有的数据库 - 它创建一个新的版本。那是为什么?
因为当您卸载应用程序时,该应用程序的所有数据库都将被删除。
答案 1 :(得分:0)
一种选择是在卸载期间将db文件更改为sdcard或其他一些文件夹 安装新应用程序后将其恢复。