小编典典

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

sql

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

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

最初,我通过创建一个MyDB实例创建了一个Singleton MyDBFactory来解决此问题。这样,至少在应用程序运行时,数据就可以保持持久性。

我想要的是数据库模式和数据是持久的!

我基本上有:

   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();
    }
}

和:

public class MyDBFactory{

private static MyDB db;

public static MyDB getInstance(Context context) {
    if(db == null) {
        db = new MyDB (context);
    }
    return db;
}

}

我想知道的是为什么每次有“ new MyDB(context)”时都会调用onCreate,并且每次我的应用程序退出时,数据库都位于何处。

如果您有一些适当的链接,或者可以使我有些头绪的一些知识,我将不胜感激!


阅读 236

收藏
2021-04-22

共1个答案

小编典典

该行:

super(context, null, null, VERSION);

第二个参数null指定应在内存中创建数据库,应为其命名。

2021-04-22