在 Android SQLite 中,我们是否也应在 onCreate() 中添加新列?
In Android SQLite shall we add the new column in onCreate() too?
我想在 SQLite 中为我的 table 之一添加新列。
我知道我可以通过在 OnUpgrade()
方法
中添加以下内容来为现有用户实现此目的
db.execSQL("ALTER TABLE my_table ADD COLUMN my_column2 INTEGER DEFAULT 0");
并且在onCreate()
方法中,table创建将保持如下
db.execSQL("CREATE TABLE IF NOT EXISTS \"my_table\" (\"coulmn_1\" INTEGER PRIMARY KEY NOT NULL UNIQUE)");
现在如果新用户安装应用程序怎么办?只有 onCreate()
会被调用,因为用户没有任何以前版本的数据库。在 onCreate()
方法中,它不包含新列 coulmn_2
那么我也要更新 onCreate()
中的 table 创建吗?否则会给现有用户带来问题?
Now what if a new user install the application? only onCreate() will
be called because user doesn't have any previous version of the
database.
这就是 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");
}
}
我想在 SQLite 中为我的 table 之一添加新列。
我知道我可以通过在 OnUpgrade()
方法
db.execSQL("ALTER TABLE my_table ADD COLUMN my_column2 INTEGER DEFAULT 0");
并且在onCreate()
方法中,table创建将保持如下
db.execSQL("CREATE TABLE IF NOT EXISTS \"my_table\" (\"coulmn_1\" INTEGER PRIMARY KEY NOT NULL UNIQUE)");
现在如果新用户安装应用程序怎么办?只有 onCreate()
会被调用,因为用户没有任何以前版本的数据库。在 onCreate()
方法中,它不包含新列 coulmn_2
那么我也要更新 onCreate()
中的 table 创建吗?否则会给现有用户带来问题?
Now what if a new user install the application? only onCreate() will be called because user doesn't have any previous version of the database.
这就是 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");
}
}