有一個大的SQLiteOpenHelper
子類可以爲數據庫中的每個表定義onCreate
和onUpgrade
方法,還是最好有許多SQLiteOpenHelper
子類,每個表有一個更好?數據庫中的每個表是否應該有一個SQLiteOpenHelper?
是否有最佳做法?或者都可以接受,但有不同的好的和壞的副作用?
有一個大的SQLiteOpenHelper
子類可以爲數據庫中的每個表定義onCreate
和onUpgrade
方法,還是最好有許多SQLiteOpenHelper
子類,每個表有一個更好?數據庫中的每個表是否應該有一個SQLiteOpenHelper?
是否有最佳做法?或者都可以接受,但有不同的好的和壞的副作用?
對於所有表,您應該有一個SQLiteOpenHelper類。檢查this鏈接。
只是一種不同的方法的緣故:
您可以隨時在onOpen(..)
方法overried有叫你onCreate(..)
。一定要使用"CREATE TABLE IF NOT EXISTS..."
語句,而不是"CREATE TABLE"
@Override
public void onOpen(SQLiteDatabase db) {
onCreate(db);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_FRIENDS_TABLE = "CREATE TABLE IF NOT EXISTS ...";
db.execSQL(CREATE_FRIENDS_TABLE);
}
你做的每從SQLiteOpenHelper
擴展類@TheReader是正確的。我更喜歡所有表的單個SQLiteOpenHelper,下面是我所做的:將「表創建」sqls的列表傳遞給SQLiteOpenHelper子類的構造函數,然後在onCreate函數中迭代列表以創建每個表。 所以我SQLiteOpenHelper的子類看起來某事像這樣:
public ModelReaderDbHelper(Context context, List<String> createSQLs, List<String> deleteSQLs){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.TABLE_CREATION_SQLS = createSQLs;
this.TABLE_DELETE_SQLS = deleteSQLs;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
for(String oneCreation : TABLE_CREATION_SQLS){
sqLiteDatabase.execSQL(oneCreation);
}
}
惟獨另一個問題:添加新表後,並與現有的舊安裝安裝應用程序的新版本,新表將不會被創建,因爲舊數據庫的存在將阻止onCreate函數被調用。所以用戶必須先卸載應用程序,然後完全安裝應用程序。該DATABASE_VERSION幫助,它似乎安卓不會執行的onCreate功能當且僅當的一個existin數據庫具有相同的名稱和相同的DATABASE_VERSION
好的,謝謝,你知道有一個爲每個sideeffect表?或者只有一個文件才能編輯? –
查看編輯答案 –
謝謝,這是很有說服力的,我會盡快閱讀! :D:D –