我想在SQLite中为我的表之一添加新列。
我知道我可以通过在OnUpgrade()
方法中添加以下内容来为现有用户实现此目标
db.execSQL("ALTER TABLE my_table ADD COLUMN my_column2 INTEGER DEFAULT 0");
和在onCreate()
方法中,表创建将保持如下
db.execSQL("CREATE TABLE IF NOT EXISTS \"my_table\" (\"coulmn_1\" INTEGER PRIMARY KEY NOT NULL UNIQUE)");
现在,如果有新用户安装该应用程序怎么办?仅onCreate()
会被调用,因为用户没有数据库的任何先前版本。在onCreate()
方法中,它不包括新列coulmn_2
那我也应该更新表的创建onCreate()
吗?还是会给现有用户带来问题?
现在,如果有新用户安装该应用程序怎么办?仅onCreate()会被调用,因为用户没有该数据库的任何先前版本。
这就是为什么CREATE TABLE
里面的语句onCreate()
必须包含新列的原因:
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(
"CREATE TABLE IF NOT EXISTS my_table(" +
"column_1 INTEGER PRIMARY KEY NOT NULL, " +
"my_column2 INTEGER DEFAULT 0)"
);
}
onCreate()
仅当数据库不存在时才调用该方法,这意味着以上语句将在不具有您的旧版本应用程序和旧数据库的设备上执行。
对于已经安装了您的应用程序以前版本的用户,onCreate()
将不会调用它,而是onUpgrade()
会执行该用户,并且应该在其中放置添加新列的代码。
因此,例如,将数据库版本更改为2(这与应用程序的版本不同),然后:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL("ALTER TABLE my_table ADD COLUMN my_column2 INTEGER DEFAULT 0");
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句