4

I'm trying to get a better understanding of the SQLiteOpenHelper class and how and when onCreate and onUpgrade are called.

My problem is that each time I quit and start my application (technically it's actually each time I create a new instance of MyDB), onCreate is called, and all of the data from the previous usage is effectively wiped... WTF???

I got around this problem initially by creating a singleton MyDBFactory where I created a single instance of MyDB. This allowed the data to be persistent while the application is running at least.

What I would like is for my database schema and data to be persistent!

I basically have:

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

and:

public class MyDBFactory{

private static MyDB db;

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

}

What I'd like to know is why onCreate is called every time I have 'new MyDB(context)', and where my database goes each time my app exits.

If you have some appropriate links, or some knowledge that would clue me up a bit, I'd greatly appreciate it!

Louis Sayers
  • 2,162
  • 3
  • 30
  • 53

1 Answers1

7

the line:

super(context, null, null, VERSION);

the second parameter is null specifying that the database should be created in memory, you should give it a name.

Android reference

kosa
  • 65,990
  • 13
  • 130
  • 167
John Boker
  • 82,559
  • 17
  • 97
  • 130