2011-08-23 63 views
2

這是我使用SQLiteOpenHelper(或android上的數據庫)的第一次。當我得到一個可寫入的數據庫時,我想知道爲什麼onCreate不會在每個類的新實例上被調用。難道我做錯了什麼?SQLiteOpenHelper not calling on創建

public class DatabaseHelper extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "MyDatabase.db"; 
    private static final int DATABASE_VERSION = 1; 
    private String PrSQLcmd = ""; 


public DatabaseHelper(Context context) 
{ 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 


@Override 
public void onCreate(SQLiteDatabase db) 
{ 
    db.execSQL("CREATE TABLE IF NOT EXISTS Contact(Firstname TEXT, LastName TEXT"); 
} 


@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 

} 

}

+3

您是否嘗試卸載應用程序?可能你已經擁有數據庫了,所以它不會調用'onCreate'。 –

+0

你是完全正確的,我忘了它只是看着數據庫,而不是我試圖添加的表格。完美工作。 – JonWells

+0

@NikitaBeloglazov +1,因爲這是所有這些相關帖子最常見的錯誤。當你回到一箇舊的項目時,很容易忘記它。 –

回答

13

在SQLiteOpenHelper '的onCreate' 的含義是它是在活動的不同。在這裏,'onCreate'只被調用一次,這是您第一次創建數據庫。下次運行應用程序時,數據庫已經存在,所以它不會調用'onCreate'。你的對象級初始化應在構造函數中完成,而不是在「的onCreate」

要查看「的onCreate」被調用,無論是手動刪除數據庫文件,或者乾脆卸載該應用。

+2

當您調用getWritableDatabase()/ readableDatabase()時,您的數據庫將被創建,該數據庫打開現有數據庫或創建新數據庫(如果不存在)。所以,onCreate只會在數據庫被緩存後纔會被調用,並會根據讀取或寫入的請求提供。 – MobileEvangelist