安装较新/现有版本的App时,会创建SQLite数据库而不是重用

时间:2011-02-25 03:16:31

标签: android database sqlite

安装较新/现有版本的应用程序时,会创建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 被调用。

谢谢

2 个答案:

答案 0 :(得分:5)

  

所以我首先“强制停止”应用程序(不执行“清除数据”),然后卸载应用程序。现在我运行较新的版本 - 这个较新的版本不使用现有的数据库 - 它创建一个新的版本。那是为什么?

因为当您卸载应用程序时,该应用程序的所有数据库都将被删除。

答案 1 :(得分:0)

一种选择是在卸载期间将db文件更改为sdcard或其他一些文件夹 安装新应用程序后将其恢复。