2012-01-23 39 views
4

我想要更好地瞭解SQLiteOpenHelper類以及如何以及何時調用onCreate和onUpgrade。Android SQLite - 爲什麼我的數據庫每次都重新創建?

我的問題是,每次我退出並啓動我的應用程序(技術上它實際上是每次創建MyDB的新實例時),onCreate被調用,並且以前用法中的所有數據都被有效地擦除...跆拳道???

我最初通過創建單例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(背景)',並且每當我的應用程序退出時,我的數據庫就會移到這裏。

如果您有一些適當的鏈接或一些知識可以讓我有點頭緒,我將不勝感激!

回答

7

行:

super(context, null, null, VERSION); 

第二個參數是null指定數據庫應在內存中創建,你應該給它一個名字。

Android reference

+0

哇,非常感謝您的快速響應!這樣一個簡單的解決方案:) –

+0

@LouisSayers歡迎您。 –

+2

顯然你現在可以擺脫工廠廢話了! –

相關問題