在Android SQLite中,我们也应该在onCreate()中添加新列吗?

r_via

我想在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

什么时候我们应该在 android 中创建新的布局

我们应该在Kotlin中绑定android视图吗?

我们应该在 firebase 中为 ios 和 Android 使用相同的 google-services.json 吗?

我应该在android中添加确认密码字段吗?

我应该在我的本机git repo中检查这个android文件夹吗?

我们可以在Android的RemoteView中添加ListView吗?

我们应该在Android中使用getPath还是getAbsolutePath

我应该在android类中为计算字段定义属性或函数吗?

我应该在Android AsyncTask中调用super.onPostExecute(result)吗?

我应该在 Play 商店中为 Android 应用停用旧的 APK 吗?

我应该在 mvp android 中重构用于单元测试的代码吗?

我应该在Android Studio中存储大量图片吗?

我应该在哪里在 build.gradle 中添加 android 配置?

如果没有公司,我应该在Android Studio中为“公司域”添加什么?

我应该在android中实现哪个依赖注入

创建类时,我们应该在 Ruby 中添加 attr_* 方法吗?

Android - 为什么我们应该在片段中使用 saveInstanceState 包而不是片段参数?

我应该在Android上青睐对象池而不是新对象吗?

我们应该如何使用android 4.4中添加的mipmap文件夹?

我应该在Android Studio中对应用程序/构建文件进行版本控制吗?

我应该在onCreate()方法中编写clickListeners还是在Android Studio中的XML文件中使用onClick属性创建单独的方法?

Android:我们可以在布局中动态添加recyclerview吗

在android中单击主页按钮时我们可以添加计数器吗?

我应该在android中录制什么格式才能在ios中播放

我们还应该在Golang中关闭DB的.Prepare()吗?

我们应该在Java中每行保留80个字符吗?

我们应该在函数中强制转换JQuery参数吗?

我们应该在基类中“ super()”吗?

我们应该在霍夫曼编码方法中包含空格吗