2012-10-29 95 views
1

我有一個類DatabaseHandler。我已經覆蓋了的onCreate(SQLiteDatabase DB)方法用下面的代碼:表未找到Android

String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_SONG + "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + 
          SONG_TITLE + " TEXT," + ARTIST_NAME + " TEXT," + GENRE + " TEXT," + 
          SONG_PATH + " TEXT" + ")"; 
    db.execSQL(CREATE_TABLE); 

,但我發現,有越來越附加到TABLE_SONG每次我打開模擬器的結果是,即使我有6個額外項目在SD卡中的歌曲數據庫顯示454首歌曲。這迫使我放棄了表格,想到再次重新創建它。但是現在我堅持認爲表格無法找到或者沒有被創建。當我創建這個類的對象時,不應該每次都調用onCreate()方法?

+1

嘗試再次卸載並安裝應用程序 – waqaslam

+0

嗨,你正在使用SQLiteOpenHelper –

+0

@DeepakSamuelRajan是的,其實我是...爲什麼? : – Saurabh

回答

0

我waqas同意請看下面的示例代碼

@Override 
     public void onCreate(SQLiteDatabase db) { 
     String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME 
        + ...) "; 
db.execSQL(CREATE_TABLE);} 

@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if exists 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
       onCreate(db); 
} 

編輯 使用onUpgrade()

當你構建這就是所謂的SQLiteOpenHelper的版本比打開的數據庫的版本更新。要做什麼取決於舊版本和新版本之間的數據庫更改。唯一的情況是,當您不刪除更改的表格時,更改記錄的內容超過了添加的列。然後,您可以使用ALTER TABLE語句將新列添加到表簽名。

+0

好吧,所以每次我需要刷新表我打電話onUpgrade()? – Saurabh

+0

舊版本中所做的任何更改都將使用此方法進行升級 –

+0

哎如何重新安裝應用程序...我是一個noob ...:/ – Saurabh

1

參照SQLiteOpenHelper的實現,當onCreate方法沒有找到數據庫文件時,它只會被調用一次,導致它創建一個。之後,只要發現數據庫版本號增加,就會調用onUpgrade

要快速解決您的問題,只需卸載並再次安裝該應用程序。這將導致您的數據庫消失,因此允許onCreate再次被調用。

+0

我是新手我們怎麼做?我必須通過命令提示符來完成嗎? – Saurabh

+0

只需轉到設置 - >應用程序,並找到您的應用程序進行卸載 – waqaslam

0

onCreate如果數據庫已經被創建,例如在上次運行應用程序期間,將不會被調用。

要麼卸載應用程序,並重新安裝 - 它會刪除數據庫文件以及

或增加你的數據庫版本,這將導致onUpgrade被調用。在onUpgrade你可以將你所有的表格和調用的onCreate