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

Abh*_*bhi 2 database sqlite android

安装较新/现有版本的App时,会创建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);
    }
Run Code Online (Sandbox Code Playgroud)

}

DB_LOCA_VERSION

getWritableDatabase

我第一次运行应用程序 - 应用程序使用我的输入创建一个数据库.然后我加载了一个更新版本的应用程序 - onCreate 保持不变.在较新的版本中,它是与更改的数据库无关的逻辑.

所以我首先"强制停止"应用程序(不执行"清除数据"),然后卸载应用程序.现在我运行较新的版本 - 这个较新的版本不使用现有的数据库 - 它创建一个新的版本.这是为什么?我想使用现有的数据库.如果我在这里遗漏了什么,请告诉我.任何线索/指针/问题都会有所帮助.

当我安装它显然在内部失败 onOpen ,所以 - 先 HDDBAdapter被调用 - 之前 hdHelper .请注意构造函数 getWritableDatabase 在应用程序版本中保持不变 - 所以它不应该获得 onCreate 现有的"mydb.db"吗?并没 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);
    }
Run Code Online (Sandbox Code Playgroud)

} 有理由 DB_LOCA_VERSION 被调用.

谢谢

Cri*_*ian 5

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

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

  • 这取决于...如果您正在开发一个认真的应用程序,您将提交到Android Market.在那里,用户可以安装应用程序,当有新版本时,将重新安装该应用程序.另一方面,如果你只是分发你的应用程序的APK ...一旦安装它,如果用户尝试安装新版本的APK,它将被重新安装. (2认同)