2013-01-10 20 views
0

我想找出一種方法來根據用戶請求在我的數據庫中動態創建新表。我目前的數據庫類使用下面的代碼。我想弄清楚如何改變這個以便能夠動態地創建新表格。我的想法之一就是使用這段代碼,首先用onCreate創建一個表,它將保存未來表的名稱。從那裏,當用戶輸入一個新表時,我會將該表添加到將保存表名稱的當前表中,然後從中選擇它並使用它來實際創建具有該特定名稱的表。我不確定這是否會實際發揮作用,但這是我剛纔想到的,並希望看到你們的想法。Android:如何由用戶自己動態創建新的數據庫表?

private static class DbHelper extends SQLiteOpenHelper{ 

    /* Constructor */ 
    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db){ 
     // TODO Auto-generated method stub 
     db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + 
       KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       KEY_FRONT + " TEXT NOT NULL, " + 
       KEY_BACK + " TEXT NOT NULL);" 
     ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int arg1, int arg2){ 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     onCreate(db); 
    } 

} 

回答

1

我不確定我是否贊成你的想法。我認爲最好有一個基礎,那就是你基本上試圖製作一個SQLite字符串第一個。在最終的表格創建之前,有一些中間數據持有者也很重要。

就個人而言,我會製作一個表單和一個Object,它可以讀取表單上的所有內容(表名,列號等)並輸出您需要的一個字符串。那麼如果需要的話,您可以將整個String保存到SharedPrefsSQLite,不過您更喜歡。

+0

我完全理解你的意思,並同意它。我可以處理數據輸入等...但我的問題是我用onCreate方法做什麼。由於該應用可能會在其生命期間結束幾個不同的表格。那麼每次添加新表時都必須更新onCreate?這正是我想弄明白的。 –

+0

哦,我明白了,我不認爲你甚至不必擔心'onCreate'。 'onCreate'不是創建表格的唯一機會。只要你可以輸入'execSQL'命令,你就可以做到這一點。但你必須擔心的是版本號。如果你創建一個新表或者更改爲一個表,你需要增加版本號來顯示更改,並且會調用onUpgrade,這就是你需要擔心的。 – mango

+0

你認爲簡單地創建兩個表會更好嗎?首先將是包含所有不同「表格」的表格,第二個表格將僅包含所有條目,並且條目將具有一列以指定它們與第一列中的條目的連接?不知何故,爲了簡化表的創建,並使其只需要兩個,並連接兩個?然後,當我需要收集該特定表名的每個值時,我會將其加載到一個arrayList或類似的東西中。 –