在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中升级数据库的正确方法是什么 的相关文章

  • 不同 Android 设备上 box2D 中出现奇怪的“口吃”

    我正在用 C 同时开发引擎和游戏 并使用 box2D 作为物理后端 我正在不同的 Android 设备上进行测试 在三分之二的设备上 游戏运行良好 物理效果也很好 然而 在我的 Galaxy Tab 10 1 上 我偶尔会遇到某种 口吃 的
  • 导航组件参数默认值

    在导航组件中 将参数从第一个片段发送到第二个片段时 默认值不会从导航图中获取哪个集合 这是我的代码 导航图 xml
  • 编译后从字节代码中删除注释

    我们正在使用一个包含使用 JAXB 注释进行注释的 bean 的库 我们使用这些类的方式完全不依赖于 JAXB 换句话说 我们不需要 JAXB 也不依赖注释 但是 由于注释存在 它们最终会被处理注释的其他类引用 这要求我将 JAXB 捆绑到
  • 在浏览器中打开 URL,即使我的应用程序为其注册了意图过滤器

    我的应用程序为某些 URL 注册了一个意图过滤器 因为它可以处理来自这些 URL 的数据 但是 在应用程序内部 我想提供一个按钮来在浏览器中打开这样的 URL 也就是说 如果设置了默认浏览器 则在默认浏览器中打开它 否则提供一个选择器 就像
  • Android 8.1 中 Activity 自行旋转并恢复正常

    我的应用程序在所有 Android 版本上运行良好 但我注意到在 Android 8 1 0 Oreo 中 当我将屏幕从纵向活动转到横向活动时 以及当我按后退按钮时 它会显示异常行为 屏幕自动从横向旋转并恢复正常 看起来 Activity
  • Android 谷歌地图 V2 已停止

    我正在尝试构建地图应用程序并关注这个链接 https blog emildesign rhcloud com p 435一步步 我在这里找到了类似的主题 但对我没有帮助 我想显示地图 但是当我运行它时 它返回强制关闭和我的 Android
  • 需要在 Android 中伪造正在扫描的 NFC 标签

    好的 我有一个应用程序 此应用程序仅在扫描 NFC 标签 任何标签 时才会完成任务 唯一的问题是 我没有任何 nfc 标签 无论如何 我正试图消除对卡的需要 所以我需要的是一种 伪造 使其看起来 就像已扫描 nfc 标签的方法 我可以编写应
  • 在后台服务中持续获取位置更新

    我正在开发需要在后台服务中持续获取位置更新的应用程序 我已经使用了它正在使用的后台粘性服务 但是 即使我添加了启动广播并在那里启动了服务 启动完成后服务也没有启动 服务启动并立即被杀死 另外 这不适用于奥利奥 服务在应用程序关闭几分钟后停止
  • 在 Android 中始终以横向模式打开相机

    在我的 Android 应用程序中 单击按钮后我希望相机以横向模式打开 即使我将手机旋转为纵向模式 相机也应始终处于横向模式或纵向模式 使用此代码在横向模式下打开相机 Intent cameraIntent new Intent Media
  • 更改 Android 中的媒体音量?

    我可以更改媒体音量吗 如何 到目前为止我用过这个 setVolumeControlStream AudioManager STREAM MUSIC 但有一个搜索栏并且想要更改媒体音量 而不是铃声音量 那么有人可以告诉我如何更改媒体音量onC
  • 按名称获取 ArrayList

    这是正确的获取方式吗ArrayList
  • 在 android 版本 7.0 上膨胀类 android.widget.DatePicker 时出错

    我想显示弹出日期选择器并且我使用此代码 Calendar mcurrentDate Calendar getInstance int mYear mcurrentDate get Calendar YEAR int mMonth mcurr
  • 在 android 中,第一次单击时按钮侦听器未注册

    因为我是 Android 新手 所以我遇到了按钮监听器的问题 我正在使用 OnClickListener 来处理胸像 但它第一次点击后不执行一旦我单击多个 它就会表现良好 但如何使其在第一次单击时成为可能 这是我的代码 public cla
  • 无法登录 Google Play 游戏服务

    我在开发者控制台上使用包名称和正确的签名证书设置了我的游戏 并为其创建了排行榜 但没有创建任何成就 然后 我从以下位置下载了示例 Type A Number Challenge 和 BaseGameUtils https developer
  • 如何在 onDraw() 方法中定义与像素无关的高度

    我扩展了 View 来构建自定义小部件 我想用独立的像素单位定义小部件的高度 我认为可以通过将像素密度乘以所需的高度来完成 但我不知道该怎么做 到目前为止我所拥有的 最小化 public class Timeline extends Vie
  • 将 Crashlytics 集成到图书馆项目

    我有一个图书馆项目 自定义视图库项目 它没有任何活动 服务 我想将 Crashlytics SDK 集成到我的库中 当我尝试通过 Android Studio 的 Crashlytics 插件 工具栏中的图标 添加它时 它只是停留在 Che
  • 应用程序中空指针异常[重复]

    这个问题在这里已经有答案了 我正在尝试在我的应用程序中实施应用程序内计费 我写了这段代码 public class Settings extends PreferenceFragment ServiceConnection mService
  • 制作弹跳动画

    我想做图层的弹跳动画 我已经完成了该图层从右到中心的操作 现在我想将其向后移动一点 然后回到中心 这会产生反弹效果 我想我可以用这样的翻译来做到这一点
  • 改造方法调用可能会产生“java.lang.NullPointerException”

    使用 Retrofit 2 3 0 我在 Android Studio 中收到以下消息 有关如何删除此 IDE 错误消息的任何建议 谢谢 来自Response文档 http square github io retrofit 2 x ret
  • 如何检查设备上是否安装了文本转语音 (TTS) 的特定语言数据?

    我正在创建一个使用文本转语音的应用程序 我希望用户能够离线使用它 因此我检查设备上是否安装了 TTS 数据 以下是执行此操作的代码 Check tts data is installed Intent checkTTSIntent new

随机推荐

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

    我试图获取用外部 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 中执行以下步骤