在Android中升级数据库的正确方法是什么

2024-03-17

如果我想保留一些旧数据并迁移到新版本的数据库,onUpgrade方法中的正确步骤是什么?

  1. 保留旧数据
  2. 删除旧表
  3. 创建新表并插入旧数据

有没有简化版本或者有更好的方法?谢谢!


升级数据库:

在表中添加新字段

在 onUpgrade 中执行以下步骤

  1. 复制临时表中的旧数据

  2. 使用新字段创建新表

  3. 再次将数据从临时表复制到新表

  4. 删除临时表

还在 onCreate 中为新用户创建新表

升级示例代码

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            if (oldVersion < newVersion) {
                if (oldVersion == 3) {
                    /**
                     * code is upgrade privious version to letest version
                     * */
                    db.beginTransaction();
                    db.execSQL("ALTER TABLE " + TableConstants.TABLE_Mst.getTableName()
                + " RENAME TO " + TableConstants.TABLE_Mst.getTableName() + "_Obsolete");
        db.execSQL(TABLE_CREATE_query_Mst);
        db.execSQL("INSERT INTO " + TableConstants.TABLE_Mst.getTableName() + "("
                + "f1, f2, f3) "
                + " SELECT f1, f2, f3 FROM " + TableConstants.TABLE_Mst.getTableName() + "_Obsolete");
        db.execSQL("DROP TABLE IF EXISTS "
                + TableConstants.TABLE_Mst.getTableName() + "_Obsolete");
                    db.setTransactionSuccessful();
                    db.endTransaction();
                    db.setVersion(newVersion);

                }
                }
                }

在数据库中添加新表

执行以下步骤

在 onUpgrade 中 1.创建新表

在 onCreate 中 1.创建新表

注意:管理您的数据库版本,下一个版本也是如此,检查旧版本是否有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Android中升级数据库的正确方法是什么 的相关文章

随机推荐

  • 使声明的名称空间正常工作时遇到问题

    我试图获取用外部 css 编写的命名空间 实际上是两个单独的文件 当我在浏览器上运行该文件时 它不会使用声明的名称空间 我认为该文件正在调用 css 文件 但它没有应用命名空间样式 HTML
  • Fortran 接受来自 C 的字符串(?)

    我觉得这应该是一个简单的问题 但我无法让它发挥作用 我有一些 Fortran 代码 需要如下输入 SUBROUTINE TRACE X Y NAME XX YY EXTERNAL NAME CALL NAME X Y XX YY 我正在尝试
  • ILookup 不应该在 TElement 中(声明)协变吗?

    定义System Linq ILookUp
  • 在两个不同的系统之间同步对象,最好的方法是什么?

    我正在致力于使用基于 XML 的有效负载在 iPhone 和网站之间同步两个业务对象 并且很乐意征求一些关于最佳例程的想法 这个问题的本质是相当通用的 我可以看到它适用于需要在 Web 实体和客户端 桌面 移动电话等 之间同步业务对象的各种
  • 我什么时候会在 ASP.NET 中使用委托?

    我一直在寻找一种方法来使用我能使用的所有工具 并超越我目前的水平 但是 尽管我读过有关委托的内容 但我永远找不到使用它们的地方 例如接口 泛型和很多东西 但我离题了 我希望有人可以向我展示他们何时以及如何使用委托在webasp net c
  • 与 Paramiko 的无密码 SSH 连接失败,而 SSH 可以正常连接

    我打算在客户端和服务器之间使用 SSH 密钥创建无密码连接 使用 paramiko 我最终得到了认证异常 通过 Popen 使用标准 SSH 我可以毫无问题地连接 对于 Paramiko 我使用以下代码 client paramiko SS
  • jQuery 中的简单淡入和可见性

    我正在尝试更改 css 属性visibility一个 div 到visible用 jQuery fadeIn 过渡 这是我的代码 a click function test fadeIn slow function this css vis
  • 伪终端中的 Ncurses 程序

    在我不断尝试了解伪终端如何工作的过程中 我编写了一个小程序来尝试运行 bash 问题是 我的断线似乎已经关闭 shell 提示符仅在我按 Enter 键后出现 此外 我仍然无法正确使用 ncurses 程序 例如 vi 谁能告诉我如何为此设
  • Swift - 在 NSArray 中插入对象/项目/添加对象/项目

    我有这个代码 var NToDel NSArray var addInNToDelArray Test1 Test2 如何添加addInNToDelArray in NToDel NSArray 你不能 NSArray是一个不可变数组 因此
  • 如何等待多个期货?

    假设我有几个 future 并且需要等到either其中任何一个都失败了or他们都成功了 例如 假设有 3 个期货 f1 f2 f3 If f1成功并且f2失败我不等待f3 并返回failure给客户 If f2失败同时f1 and f3仍
  • Ruby on Rails 中的社交媒体共享按钮

    我正在尝试在 Ruby on Rails 的博客应用程序中添加自定义社交媒体共享按钮 对我来说重要的是 将显示一个用于共享 帖子 的弹出窗口 这意味着我想包含 Javascript 不幸的是这段代码不起作用 a a
  • 向旋转矩形添加“假”抗锯齿

    我正在使用 Corona SDK 它最近禁用了抗锯齿功能 并且无法重新启用它 我有几个使用旋转矩形和线条的应用程序 并且想要一种不看起来锯齿状的方法 此图显示了差异 有没有办法在 Corona 中为这些矩形添加某种抗锯齿功能 我更喜欢抗锯齿
  • @IntDef 注释和从其他无法注释的代码返回值或如何暂时禁用注释影响代码?

    我在用IntDef https developer android com reference android support annotation IntDef html from Android 支持注解 https sites goo
  • Kendo Asp.net MVC 网格批处理模式计算列显示不更新

    在 Ajax 批处理模式下使用 Kendo Asp net MVC 网格 具有三列 数量 费率 总计 需要实现对变化的实时计算 编写以下函数来更新数据 function grid change e if e action itemchang
  • 在 MVC 架构中公开 Java 组件(例如 JButton)的最佳方式是什么?

    我目前正在用 Java 编写一个 Blackjack 应用程序 它需要用 MVC 架构编写 我的所有模型 视图和控制器都已完全编码 一切都运行良好 但是 我想知道将侦听器附加到组件的最佳方法是什么 例如 JButton 我当前的设计将视图中
  • 狮子滚动条颜色

    Lion 中的滚动条似乎基于 HTML 背景颜色 较浅的颜色 BG 黑色滚动条 较深的 BG 白色 我遇到的问题是 我认为 关于页脚的常见技巧 我通常将 HTML 元素的背景颜色设置为页脚的颜色 这样 如果页面比浏览器窗口短 页脚似乎会继续
  • 我无法导入任何 python 模块,也无法使用 pip 安装任何模块

    当我尝试导入使用 pip3 安装的任何模块时 系统只会向我发送大量文本 很抱歉我无法指定更好的内容 但我对 python 和 ubuntu 很陌生 我尝试了命令 pip3 list 然后我得到这个 usr lib python3 dist
  • 在 PyMongo 中查找子字符串

    我想使用 PyMongo 在 MongoDB 中的字段中查找子字符串 以下查询工作正常 并且是我所需要的 db collection find Animal cat Dog i 但是 如果我尝试传递该值 cat Dog i作为 Python
  • PyCharm 在带有大数据的 iPython 控制台中长时间挂起

    我看过一些报告 PyCharm 很慢 但我遇到了一个问题 即使与正常操作相比 它似乎也太慢了 我在 pandas 数据框中有大量数据 从 440 MB 的 csv 文件读取 当我在 PyCharm 中使用 ipython 控制台时 每次我尝
  • 在Android中升级数据库的正确方法是什么

    如果我想保留一些旧数据并迁移到新版本的数据库 onUpgrade方法中的正确步骤是什么 保留旧数据 删除旧表 创建新表并插入旧数据 有没有简化版本或者有更好的方法 谢谢 升级数据库 在表中添加新字段 在 onUpgrade 中执行以下步骤