【问题标题】:Manage sqlite tables on SQLiteOpenHelper onUpgrade在 SQLiteOpenHelper onUpgrade 上管理 sqlite 表
【发布时间】:2018-11-04 04:28:43
【问题描述】:

我在 Playstore 中发布了一个 android 应用程序。 我需要在现有表中添加一些列。 当我删除并重新创建表时,所有数据都将丢失。

有什么办法可以改变保留现有数据的数据库。

【问题讨论】:

    标签: android sqlite sqliteopenhelper


    【解决方案1】:

    要添加列,您可以使用 ALTER TABLE your_table ADD COLUMN column_definition 而不删除表。

    请阅读SQL As Understood By SQLite - ALTER TABLE,因为有限制。该链接还讨论了其他类型的架构更改。

    例如你可以有类似的东西:-

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (oldVersion = 1 && newVersion > 1) {
            String alterSQL = "ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + NEWCOLUMN + " INTEGER DEFAULT 100";
            db.execSQL(alterSQL);
        }
    }
    

    【讨论】:

    • 这有点问题。如果我使用 alter 查询,每次用户更新时,它都会被执行(?)如果我在下一个版本中删除这个查询,那些跳过最后一次更新的人将不会有这个列......
    • @YesudassMoses 您在 onUpgrade 中正确执行(例如现在添加的示例)
    • 谢谢,我会检查的。我可以运行 PRAGMA table_info 并仅添加结果集中缺少的列吗?这是个好主意吗?
    • 注意使用 DEFAULT VALUE 值将填充现有行
    • @YesudassMoses 实际上,我有一个完整的过程,不使用基于创建 伪模式 的类的 onUpgrade,该类与实际进行比较(查看 sqlite_master 和 pragma 的)。所以是的,这种方式是可行的。代码是here
    猜你喜欢
    • 2011-03-31
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    相关资源
    最近更新 更多