Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android SQLite中,我们是否也要在onCreate()中添加新列?_Java_Android_Sqlite_Android Sqlite - Fatal编程技术网

Java 在Android SQLite中,我们是否也要在onCreate()中添加新列?

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\" (\"

我想在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()将 由于用户没有任何以前版本的 数据库

这就是为什么
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”);
}
}