升级时使用新版本的数据库错误

时间:2014-02-14 13:12:58

标签: android database

我在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");
        }

1 个答案:

答案 0 :(得分:1)

只有在数据库版本变旧时才会调用

onUpgrade。即您更改在数据库创建期间传递的版本。

例如

super(context, DATABASE_NAME, null,DATABASE_VERSION);

现在如果更改了DATABASE_VERSION,那么只会调用onUpgrade ......

所以我认为,你只需要在onCreate中执行你的create table命令,并且只使用onUpgrade中更改表的命令。这样你就不会遇到这个问题。

希望有所帮助