在版本升级时,我想在sqlite数据库表中添加一个新列,这在android中不是exsit。如果该列已存在,则不应更改该表。在onUpgrade()方法中我不会丢弃表becoz我不想丢失数据。
答案 0 :(得分:4)
我拼凑了几条评论来得到这个:
Cursor cursor = database.rawQuery("SELECT * FROM MY_TABLE", null); // grab cursor for all data
int deleteStateColumnIndex = cursor.getColumnIndex("MISSING_COLUMN"); // see if the column is there
if (deleteStateColumnIndex < 0) {
// missing_column not there - add it
database.execSQL("ALTER TABLE MY_TABLE ADD COLUMN MISSING_COLUMN int null;");
}
这故意忽略了数据库版本号,如果不存在则纯粹添加列(在我的情况下,版本号没有帮助我,因为当该列应该被添加时编号已经变得不稳定)
答案 1 :(得分:3)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// If you need to add a column
if (newVersion > oldVersion) {
if(!ColunmExists) {
db.execSQL("ALTER TABLE foo ADD COLUMN new_column INTEGER DEFAULT 0");
}
}
}