2016-05-30 42 views
1

我是新的android開發,我正在做一個簡單的android應用程序,它使用sqlite來保存一些數據。SqliteOpenHelper onCreate()方法更改被忽略

我有一個SqliteOpenHelper處理事物的數據庫端。我有一個onCreate方法,其發起數據庫

Class構造

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

哪裏實例化在另一個類中

cardDBHandler = new CardDBHandler(this, null, null, 1); 

的onCreate方法

@Override 
    public void onCreate(SQLiteDatabase db) { 
     String query = "CREATE TABLE " + TABLE_CARDS + "(" + 
      CARD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      DECK_ID + " INTEGER, FOREIGN KEY (" + DECK_ID +") 
      REFERENCES DATABASE_NAME(COLUMN_ID), " + 
      CARD_FRONT + " TEXT, " + 
      CARD_BACK + " TEXT " + 
      ");"; 
     db.execSQL(query); 
     Log.d(TAG, "Created card database"); 
    } 

因爲我已經改性這種方法,但我的應用程序沒有註冊更改,這會導致一些例外。

我應該將這個類添加到清單中,就像我添加一個活動一樣嗎? 在此先感謝。

+1

是從SQLiteOpenHelper執行這個代碼?你在哪裏實例化它? – Egor

+1

你使用'SQLiteOpenHelper'嗎?如果你不是,你需要自己調用這個方法,例如從你的Activity'onCreate',Android不會爲你做。 – JonasCz

+0

@JonasCz是的我正在使用SQLiteOpenHelper。我認爲每當我像活動的工作方式一樣實例化類時,方法就會自動調用。 – tinOfBeans

回答

1

如果所做的更改後的數據庫已經作出,則必須更新數據庫版本編號並設置onUpgrade方法以刪除並重新創建表。

您也可以從構造函數中刪除一些參數,因爲它們沒有被使用。

public CardDBHandler(Context context, SQLiteDatabase.CursorFactory factory) { 
    super(context, CARD_DATABASE_NAME, factory, CARD_DATABASE_VERSION); 
} 

然後

cardDBHandler = new CardDBHandler(this, null); 
+0

如果我要更新數據庫,我會不需要構造函數中的版本號?我已經讀過,每當我用大於當前版本號的實例化DB時,都會調用onUpgrade方法。 – tinOfBeans

+0

看起來你已經在SqliteOpenHelper類中定義了一個常量,所以不,你不應該讓你的類意外地重新創建你的數據庫;) –

+0

是的,它必須更大,所以你從1開始,所以現在make它2.使用數字的構造函數是超級構造函數,而不是你自己的 –

-3

你刪除這些行:

super.onCreate(stuff); 
setContentView(R.layout.stuff); 

你需要它,第一行調用的onCreate父親,第二個設置視圖。

如果要運行這些腳本,做一個分離的方法,你會打電話給形成你的onCreate

super.onCreate(stuff); 
setContentView(R.layout.stuff); 
doScript(); 




private void doScript(){ 
} 
+1

這顯然不是Activity的onCreate()方法,所以你的回答是不正確的。 – Egor