2014-02-14 47 views
0

我在onUpgrade()方法中向數據庫中添加了一列,該方法在存在以前數據庫版本的設備/模擬器上正常工作。在升級時使用新版本時出現數據庫錯誤

但是,當第一次在設備上安裝 時,無法找到啓動列(在upgrade()中)的錯誤。

我認爲這是因爲設備無法找到以前的版本,因此onUpgrade()未執行。

有沒有辦法解決這個問題?

乾杯

下面是代碼:

@Override 
    public void onCreate(SQLiteDatabase db) { 
     // only called once when DB first created, takes DB as arg 
     db.execSQL("CREATE TABLE "+ DATABASE_TABLE + " ("+ 
     KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     KEY_DIVELOCATION + " TEXT , "+ 
     KEY_DIVESITE + " TEXT , " + 
     KEY__DIVENUMBER + " INTEGER DEFAULT 0 , " + 
     KEY__DIVEDATE + " TEXT , " + 
     KEY_DIVERATING + " FLOAT DEFAULT 0.0 , " + 
     KEY_BOTTOMTIME + " INTEGER DEFAULT 0 , " + 
     KEY_DIVEBUDDY + " TEXT , " + 
     KEY__DIVECENTER + " TEXT , " + 
     KEY_ENDBAR + " INTEGER DEFAULT 0 , " + 
     KEY_STARTBAR + " INTEGER DEFAULT 0 , " + 
     KEY_VIZIBILTY + " INTEGER DEFAULT 0 , " + 
     KEY_WATERTEMP + " INTEGER DEFAULT 0, " + 
     KEY_COMMENTS + " TEXT , " + 
     KEY_CONDITIONS + " TEXT , " + 
     KEY_DIVEPICTURE + " TEXT);" 
     ); 
     //use for dtabase querys 
     columns = new String[]{KEY_ROWID, KEY_DIVERATING, KEY_BOTTOMTIME, KEY_DIVEBUDDY, 
       KEY__DIVECENTER, KEY_DIVELOCATION, 
       KEY__DIVENUMBER, KEY_DIVESITE, KEY_ENDBAR, KEY_STARTBAR, 
       KEY_VIZIBILTY, KEY_WATERTEMP,KEY__DIVEDATE, 
       KEY_COMMENTS, KEY_CONDITIONS, KEY_DIVEPICTURE}; 



    }//end onCreate DB inner helper class 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // if table exits, drop it (delete) and recreate it to upgrade it 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     onCreate(db); 
     //need to call upgrade and add a int column for depth, newVersion is 2 
     if (newVersion> oldVersion){ 
      db.execSQL("ALTER TABLE "+DATABASE_TABLE+" ADD COLUMN "+KEY_DEPTH+" INTEGER DEFAULT 0"); 
     } 
+1

您應該修改代碼在'的onCreate()'也因爲有沒有安裝應用程序的設備。 – cosmincalistru

+0

發佈您的onCreate方法代碼。 –

回答

1

onUpgrade將在數據庫意志的版本不會過時只調用。即更改數據庫創建期間通過的版本。

super(context, DATABASE_NAME, null,DATABASE_VERSION); 

現在,如果DATABASE_VERSION改變,只有onUpgrade將被稱爲...

因此,我認爲,你只需要執行您在onCreate創建表命令,並且只使用命令在onUpgrade更改表格。這樣你就不會有這個問題。

希望它可以幫助

+0

我剛將新列的創建移動到了onCreate方法,並且在沒有以前的DataBase版本的設備上工作良好。謝謝 – dancingbush

相關問題