2012-12-14 82 views

回答

24

對於所有表,您應該有一個SQLiteOpenHelper類。檢查this鏈接。

+0

好的,謝謝,你知道有一個爲每個sideeffect表?或者只有一個文件才能編輯? –

+1

查看編輯答案 –

+1

謝謝,這是很有說服力的,我會盡快閱讀! :D:D –

4

只是一種不同的方法的緣故:

您可以隨時在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

擴展類
1

@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

相關問題