更新sqlite数据库版本?

我有一个数据库,我想添加一列,我改变了静态数据库版本,但是当我在我的设备上运行该程序的新列仍然不存在,所以我猜我的onUpdate没有得到调用,我不知道为什么。

这是我如何创build数据库

  private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { createTables(db); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w("CalendarDB", "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS Events_Table"); onCreate(db); } private void createTables(SQLiteDatabase db){ db.execSQL("CREATE TABLE " + EVENTS_TABLE + "(" + ID + " integer primary key autoincrement, " + EVENT + " TEXT, " + LOCATION + " TEXT, " + DESCRIPTION + " TEXT, " + DATE + " TEXT, " + START + " LONG, " + END + " TEXT, " + REAL_START_TIME + " TEXT," + REAL_END_TIME + " TEXT," + COLOR + " TEXT, " + BLINK + " TEXT, " + VIBRATE + " TEXT, " + RING_TONE_PATH + " TEXT, " + ICON + " TEXT, " + REMINDERS + " TEXT, " + START_WITH_REMINDER + " TEXT, " + CALENDAR_ID + " TEXT, " + EVENT_ID + " TEXT);"); } } 

有什么我不得不做的onUpdate被调用? 我试着按照这个答案,但仍然没有结果

Solutions Collecting From Web of "更新sqlite数据库版本?"

为了在Android中升级数据库,您应该将DATABASE_VERSION加1,以便SQLOpenHelper知道它必须调用onUpgrade方法。

Rembember

这只在你调用getWritableDatabase()时才起作用,否则不会升级。 如果您更改版本并调用getReadableDatabase,它将显示一个exception

 throw new SQLiteException("Can't upgrade read-only database from version " + db.getVersion() + " to " + mNewVersion + ": " + path); 

但为什么? 你看到当你调用getWritableDatabase时 ,代码检查版本是否一样:

 if (version != mNewVersion) { db.beginTransaction(); try { if (version == 0) { onCreate(db); } else { if (version > mNewVersion) { onDowngrade(db, version, mNewVersion); } else { onUpgrade(db, version, mNewVersion); } } db.setVersion(mNewVersion); db.setTransactionSuccessful(); } finally { db.endTransaction(); } } 

更新

事实certificate,它应该与getReadableDatabase()一起工作,因为在代码中,你总是得到一个WrittableDatabase。 所以它应该使用这两个方法,这里是getReadableDatabase()的文档:

创build和/或打开数据库。 这将是getWritableDatabase()返回的相同对象,除非某个问题(如完整磁盘)需要数据库以只读方式打开。 在这种情况下,将只返回一个只读数据库对象。 如果问题得到解决,以后调用getWritableDatabase()可能会成功,在这种情况下,只读数据库对象将被closures,将来将返回读/写对象。

我build议你增加一个DATABASE_VERSION ,这将导致应用程序调用onUpgrade()