我想为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()
方法中,它不包括新的柱couln_2
那么我也应该更新onCreate()
中的表创建吗?还是会给现有用户带来问题?
现在,如果一个新用户安装了应用程序,该怎么办?只有onCreate((由于用户没有任何以前版本的数据库
这就是为什么onCreate()
中的CREATE TABLE
语句必须包含新列:
@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");
}
}