我在onUpgrade()
方法中向数据库添加一个列,该方法适用于以前存在数据库版本的设备/模拟器。
但是第一次在设备上安装时 我无法找到启动列(在升级()中)的错误。
我假设这是因为设备无法找到以前的版本,因此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");
}
答案 0 :(得分:1)
onUpgrade。即您更改在数据库创建期间传递的版本。
例如
super(context, DATABASE_NAME, null,DATABASE_VERSION);
现在如果更改了DATABASE_VERSION,那么只会调用onUpgrade ......
所以我认为,你只需要在onCreate
中执行你的create table命令,并且只使用onUpgrade
中更改表的命令。这样你就不会遇到这个问题。
希望有所帮助