我在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");
}
您應該修改代碼在'的onCreate()'也因爲有沒有安裝應用程序的設備。 – cosmincalistru
發佈您的onCreate方法代碼。 –