从以前的Android应用程序版本向SQLite添加其他列

 苦--但是依然love着你 发布于 2023-02-06 15:37

在我的Android应用程序中,我使用的是一个标准的SQLite数据库,其中一个辅助类有一个包含3列的表.在最近的更新中,我不得不在表中添加另一列,但是有些用户报告了崩溃,其中(通过堆栈跟踪判断)我认为来自新版本试图从不存在的列读取因为数据来自旧版本.除了手动备份和还原之外,如何在更新之间保护用户数据?

以下是完整更新的数据库类的链接:https: //github.com/cjbrooks12/scripturememory/blob/working/src/com/caseybrooks/scripturememory/databases/VersesDatabase.java

1 个回答
  • SQLiteOpenHelper将处理数据库版本控制,您只需要提供适当的数据库版本号和重写的回调.看看你的代码:

      DB_VERSION是1.当您在已发布的版本之间更改数据库架构时,您应该增加此数字.版本号存储在数据库文件中,如果代码中提供的版本与存储在文件中的版本不同,onUpgrade()或者onDowngrade()将相应地调用.在您的情况下,由于数据库文件已存在,因此未onCreate()调用,并且由于版本号匹配,因此未执行升级.

      onUpgrade()丢弃表,然后重新创建它.在某些情况下,这可能没问题,比如,它只是存储在别处的数据的缓存副本,但通常作为用户,我不希望应用程序升级来删除我的数据.实现,onUpgrade()以便在保留数据的同时进行必要的模式修改.一些通用策略:

      如果它只是添加一些列ALTER TABLE并放置一些合适的默认值.

      如果模式更改更复杂,请将旧表重命名为临时名称,创建新表,然后从临时表中迁移数据.

      在任何情况下,在onUpgrade()数据库模式应该具有相同的形状之后,如果onCreate()调用它来创建新数据库,但保留现有数据.

    2023-02-06 15:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有