2012-06-04 20 views
0

我必須在我的android應用程序中創建將近5-6個表格。什麼是創建SQLite數據庫和5-6表的最佳地點?我可以在初始活動啓動時編寫所有這些邏輯(使用SQLite開放輔助方法),但是如果我這樣做,它會在每次初始活動啓動時調用。這意味着這些數據庫和表的創建邏輯將在每次啓動應用程序時執行。任何機構都可以告訴我們這樣做的最佳實踐。Android:什麼是創建SQLite數據庫和表格的最佳地點

回答

0

您可以在主要活動中創建數據庫和表

但是創建數據庫,然後才能檢查

if(exits()) 
{ 
    // do not create 
} 
else 
{ 
    // create here 
} 
1

如果你寫一個類的onCreate方法擴展SQLiteOpenHelper和創建表僅會被執行一次。如果您完全從設備中刪除數據/應用程序,助手將僅重新創建數據。

developer.android.com:第一次創建數據庫時調用。這是創建表格和表格的初始人口應該發生的地方。

給你更多的信息。 在用於擴展SQLiteOpenHelper的類的構造函數中,調用超級構造函數,它接受一些參數。其中之一是數據庫版本。

如果db_version傳遞給超構造是不同的,那麼最後傳給之一,onUpgrade方法被調用,在onUpgrade()方法,你可以調用的onCreate()

這樣:

  1. 刪除數據/應用
  2. 原因onUpgrade被稱爲它調用的onCreate()

是創建/更新方式/刪除數據庫

0

Personnaly,我使​​用選項:CREATE TABLE IF NOT EXISTS

所以日開放幫手有這個PARAM:

private static final int VERSION_BDD = 1; 

我覺得openHelper不會在每次啓動時重新創建每個表。

0

您可以使用一個內部類extendings的SQLiteOpenHelper和覆蓋的方法公共無效的onCreate(SqLiteDatabase sqlLiteDatabase)和公共無效onUpgrade(SQLiteDatabase sqLiteDatabase,INT oldVersion,INT NEWVERSION)

的的onCreate當沒有數據庫中存在被稱爲在磁盤和助手類需要創建一個新的

當db版本不匹配時調用onUpgrade。 DB的磁盤上的版本需要升級到NEWVERSION

private static final class PatientDatabaseHelper extends SQLiteOpenHelper { 

    private static final String TAG = "PatientProvider"; 

    private static final String DATABASE_NAME = "myPatient.db"; 
    private static final int DATABASE_VERSION = 1; 
    private static final String PATIENT_TABLE = "PATIENT"; 

    private static final String CREATE_TABLE_PATIENT = 
      "create table " + PATIENT_TABLE + " (" 
        + PATIENT_KEY_ID + " integer primary key autoincrement, " 
        + PATIENT_NAME + " TEXT NOT NULL, " 
        + PATIENT_FIRST_NAME + " TEXT NOT NULL, " 
        + PATIENT_TEL + " TEXT, " 
        + PATIENT_GSM1 + " TEXT, " 
        + PATIENT_GSM2 + " TEXT, " 
        + PATIENT_BIRTHDATE + " DATE); "; 



    public PatientDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
     super(context, name, factory, version); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     sqLiteDatabase.execSQL(CREATE_TABLE_PATIENT); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
       + newVersion + ", which will destroy all old data"); 
     //simple case sample - droppin the table 
     sqLiteDatabase.execSQL("DROP TABLE IF IT EXISTS " + PATIENT_TABLE); 


     //Create a new One 
     onCreate(sqLiteDatabase); 

    } 
} 

的Android的目標版本取決於但我認爲一個好的方法是與ContentProvider的使用http://developer.android.com/guide/topics/providers/content-provider-creating.html

相關問題