Java 在Android SQLite中,我们是否也要在onCreate()中添加新列?
我想在SQLite中为我的一个表添加新列 我知道我可以通过在Java 在Android SQLite中,我们是否也要在onCreate()中添加新列?,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我想在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\" (\"
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()将
由于用户没有任何以前版本的
数据库
这就是为什么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(这与应用程序的版本不同),并:
@覆盖
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
如果(旧版本<2){
db.execSQL(“ALTER TABLE my_TABLE ADD COLUMN my_column2 INTEGER DEFAULT 0”);
}
}
现在,如果新用户安装了该应用程序,该怎么办?只有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(这与应用程序的版本不同),并:
@覆盖
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
如果(旧版本<2){
db.execSQL(“ALTER TABLE my_TABLE ADD COLUMN my_column2 INTEGER DEFAULT 0”);
}
}