Android SQLite - почему моя БД создается заново каждый раз? - PullRequest
4 голосов
/ 24 января 2012

Я пытаюсь лучше понять класс 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();
    }
}

и:

public class MyDBFactory{

private static MyDB db;

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

}

Я хотел бы знать, почему onCreate вызывается каждый раз, когда у меня появляется «новый MyDB (контекст)», и куда моя база данных обращается каждый раз, когда выходит мое приложение.

Если у вас есть какие-то подходящие ссылки или знания, которые могли бы мне немного помочь, я был бы очень признателен!

1 Ответ

7 голосов
/ 24 января 2012

строка:

super(context, null, null, VERSION);

второй параметр - null, указывающий, что база данных должна быть создана в памяти, вы должны дать ей имя.

Ссылка на Android

...