Android SQLite - 为什么每次重新创建我的数据库?

Lou*_*ers 4 sql android oncreate

我试图更好地理解SQLiteOpenHelper类以及如何以及何时调用onCreate和onUpgrade.

我的问题是,每次我退出并启动我的应用程序(从技术上讲,实际上每次我创建一个新的MyDB实例),onCreate被调用,并且以前用法的所有数据都被有效擦除... WTF ???

我最初通过创建一个单独的MyDBFactory解决了这个问题,我在其中创建了一个MyDB实例.这使得数据在应用程序运行时至少是持久的.

我想要的是我的数据库架构和数据是持久的!

我基本上有:

   public class MyDB extends SQLiteOpenHelper{
      private static int VERSION = 1;
      ...
      public ContactControlDB(Context context) {
        super(context, null, null, VERSION);
      }

@Override
public void onCreate(SQLiteDatabase db) {
    try {
        db.execSQL(DATABASE_CREATE);
        db.execSQL(INSERT_DATA);
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

public class MyDBFactory{

private static MyDB db;

public static MyDB getInstance(Context context) {
    if(db == null) {
        db = new MyDB (context);
    }
    return db;
}
Run Code Online (Sandbox Code Playgroud)

}

我想知道的是为什么每次我有'新MyDB(上下文)'时调用onCreate,以及每次我的应用程序退出时我的数据库都会被调用.

如果你有一些合适的链接,或者一些可以让我知道的知识,我会非常感激!

Joh*_*ker 7

这条线:

super(context, null, null, VERSION);
Run Code Online (Sandbox Code Playgroud)

第二个参数是null指定应该在内存中创建数据库,你应该给它一个名字.

Android参考

  • 显然你现在可以摆脱工厂废话! (2认同)