2014-02-14 46 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

相关问题