Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从Google Play首次安装时,Android Room迁移未运行

从Google Play首次安装时,Android Room迁移未运行
EN

Stack Overflow用户
提问于 2020-11-20 11:30:33
回答 1查看 343关注 0票数 2

我在我的应用程序中添加了一个新的迁移(我在其中插入了一个表),并上传到了Google Play (最新更新)。在MIGRATION_7_8中,我将这些插入添加到类型表中。当我从Google Play (全新安装)安装它时,insterts将不会出现在应用程序中。但我检查了一下,是否有人将Google Play中的uapp从以前的版本更新到了最新版本,这些插件都在应用中。这很有趣。首次安装时未触发的Google Play更新触发了哪些内容?

现在的问题是,谁更新了应用程序,谁就有这些插件,但谁第一次安装它,他们就不会有这些插件。我尝试了一些方法,但都不起作用。有什么想法吗?

代码语言:javascript
运行
AI代码解释
复制
@Database(entities = {Types.class, Item.class, Most.class}, version = 8, exportSchema = true)
...
    Room.databaseBuilder(context.getApplicationContext(),
                        MyDatabase.class, "mydatabase.db")
                        .allowMainThreadQueries()
                        .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4,
                                MIGRATION_4_5, MIGRATION_5_6, MIGRATION_6_7, MIGRATION_7_8)
                        .addCallback(roomCallback)
                        .build();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-21 11:19:12

对于新安装,迁移不会运行。

新安装无需迁移即可接收数据库模式/表的当前版本。

在Room注解框架之前,大多数安卓开发人员使用一个名为SQLLiteOpenHelper的类来更直接地实现SQL,这个类是Room注解框架的基础。

SQLLiteOpenHelper有两个重要的方法:

代码语言:javascript
运行
AI代码解释
复制
// Method is called during creation of the database
@Override
public void onCreate(SQLiteDatabase database) {
    ...
    database.execSQL(DATABASE_CREATE); // Crate the DB in SQL
    populateDb(); // Add any necessary data
}

// Method is called during an upgrade of the database
@Override
public void onUpgrade(SQLiteDatabase database,int oldVersion,int newVersion){
    Log.w(MyDatabaseHelper.class.getName(),
                     "Upgrading database from version " + oldVersion + " to "
                     + newVersion);
    performUpgrade(db, upgradedVersion, newVersion);
}

// Helper method to upgrade the DB
private int performUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Usually implemented as large switch statement with one case statement for
    // each migration. In other words, 1 case statement for each DB version
    // (1,2, 3, .... n)
    //
    // A typical implementation would recursively call performUpgrade until all the
    // individual migration cases have been run
    //
    // Typical migration case:
    // 1. Add a new table or add a new column to an existing table
    // 2. Add some data to the new table or column when necessary
} 

回到房间,当新用户安装数据库时,将使用CREATE TABLE等SQL语句在幕后创建数据库,这些语句基于已经放在房间实体上的注释。( onCreate案例)

但是,如果有人从数据库版本1迁移到数据库版本2,我们就不能重新创建表,因为数据将会丢失。在本例中,运行诸如ALTER TABLE x ADD COLUMN y之类的迁移语句来修改现有表。( onUpgrade案例)

关于添加新数据,是的,在创建数据库和迁移/升级数据库时都需要添加新数据。创建数据库时,新用户将获得所需的所有数据。但在某些情况下,现有用户将需要在添加表或列时接收数据。在这两种情况下,通常可以通过调用相同的函数来避免代码重复。

更新:一个很好的帖子,展示了Room和平台上的底层事件方法之间的关系:

Does Android Room offer SqliteOpenHelper onCreate() & onUpdate() alternative?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64928681

复制
相关文章
Ruby检测Gem是否安装
最近参加七牛的demo大赛,决定使用ruby开发。于是遇到了一些疑问,然后解决了,这里记录一下。
技术小黑屋
2018/09/04
1.9K0
MAC安装Ruby Rails brew gem
Error running ‘requirements_osx_brew_libs_install autoconf automake libtool pkg-config libyaml readline libksba openssl’,
全栈程序员站长
2021/05/19
1.7K0
在执行gem: redis requires Ruby version >= 2.2.2
/usr/local/rvm  /usr/local/rvm/src/rvm  /usr/local/rvm/src/rvm/bin/rvm  /usr/local/rvm/src/rvm/lib/rvm  /usr/local/rvm/src/rvm/scripts/rvm  /usr/local/rvm/bin/rvm  /usr/local/rvm/lib/rvm  /usr/local/rvm/scripts/rvm
拓荒者
2019/03/11
1.4K0
【Ruby】【改gem源镜像】【Win10 + Jruby-9.1.2.0 + Rails 5.1.3 + gem 2.6.4 】
(1)> gem sources –add http://gems.ruby-china.org 遇到问题: Error fetching https://gems.ruby-china.org/: certificate verify failed (https://gems.ruby-china.org/specs.4.8.gz)
全栈程序员站长
2022/09/06
7800
warning insecure world writable dir ruby mode 040777,gem insstal sass error failed to build gem nati
不知道homebrew的不要问我,因为我也不知道是什么鬼。应该和忍者影分身一种鬼东西。
landv
2019/05/23
1.3K0
warning insecure world writable dir ruby mode 040777,gem insstal sass error failed to build gem nati
如何使用ReconAIzer将OpenAI添加到Burp中
ReconAIzer是一款功能强大的Burp Suite扩展,该工具基于Jython开发,可以为Burp Stuite添加OpenAI能力,并利用OpenAI来优化和增强渗透测试过程中的网络侦查任务。该工具专为漏洞猎人和渗透测试人员设计,支持以自动化的形式执行多种网络安全任务,可以帮助广大安全研究人员以简单快速的形式识别和利用漏洞。
FB客服
2023/08/08
3730
如何使用ReconAIzer将OpenAI添加到Burp中
将oracle驱动包加到maven中
2、确认maven环境变量已整确(cmd 中执行 mvn -v 显示maven的版本信息);
qubianzhong
2018/08/10
5090
将Python网络爬虫的数据追加到csv文件
前几天在Python白银交流群有个叫【邓旺】的粉丝问了一个将Python网络爬虫的数据追加到csv文件的问题,这里拿出来给大家分享下,一起学习下。
前端皮皮
2022/08/17
2K0
将Python网络爬虫的数据追加到csv文件
使用Python附加到JSON文件
JSON的完整形式是JavaScript Object Notation。这意味着将使用编程语言的文本组成的脚本(可执行)文件用于存储和传输数据。Python通过名为的内置包支持JSON json。要使用此功能,我们以Python脚本导入json包。JSON中的文本是通过带引号的字符串完成的,该字符串包含中的键-值映射中的值{ }。
用户7466307
2020/07/02
1.8K0
使用Python附加到JSON文件
Java将内容追加/添加到现有文件
如果您希望代码创建一个新文件并删除以前的现有文件,则FileWriter可以轻松代替它。要替换现有文件中的所有内容,请使用以下命令:
用户7886150
2021/04/28
3.1K0
如何手动将消息添加到Linux系统日志文件
日志文件是包含系统本身已记录的一组记录(或事件列表)的文件。使用日志文件,系统管理员可以跟踪在特定日期或特定时间发生的情况。管理员通常将日志文件用于故障排除。日志文件是自动生成的,并保存在公共目录-/ var / log /下。我们还可以将消息手动添加到Linux系统日志文件中。例如,设置日志服务器后,您可能要检查日志服务器是否正常运行。为此,我们可以在日志文件中手动添加一些条目以测试日志服务器。这是logger命令派上用场的地方。
用户6543014
2020/02/21
2.3K0
使用innodb_ruby 分析innodb物理文件
yum install zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel
保持热爱奔赴山海
2019/09/17
6750
使用Capistrano,Nginx和Puma在Ubuntu 14.04上部署Rails应用程序
Rails是一个用Ruby编写的开源Web应用程序框架。Nginx是一种高性能HTTP服务器,反向代理和负载均衡器,以其并发性,稳定性,可伸缩性和低内存消耗而著称。与Nginx一样,Puma是另一个极其快速且并发的Web服务器,内存占用非常小,但是为Ruby Web应用程序构建。
尘埃
2018/08/09
5.1K0
Windows 下 Gollum 安装与使用
GitHub :gollum 我们通过它的介绍,可以知道gollum 是基于Ruby开发的一个软件。
zinyan.com
2023/07/13
7200
Windows 下 Gollum 安装与使用
ARKit 简介-使用设备的相机将虚拟对象添加到现实世界中 看视频
到目前为止,你一定听说过关于增强现实的这个相当新的概念。这项技术并不新鲜,您已经在电影中看到它或在电子游戏中体验过它。我的意思是,如果不是免费的话,一般人群现在可以以最低成本轻松获得它。尽管ARKit仅在2017年于2017年发布,但它很快受到欢迎,其可能性无穷无尽。一些人声称这是“下一次大转变”或“改变游戏规则”。
iOSDevLog
2019/06/17
3.7K0
ARKit 简介-使用设备的相机将虚拟对象添加到现实世界中 看视频
Ruby常用文件操作
初学Ruby,很多需要学习,现在开始尝试使用Ruby来写一个脚本,其中用到了很多文件相关的操作,这里阶段地整理一些。便于后续的再次查找。
技术小黑屋
2018/09/04
5690
Winform 后台将指定的控件集合添加到制定容器中
1 /// <summary> 2 /// 把按钮按照行数分割排列 3 /// </summary> 4 /// <param name="ControlArry">按钮集合</param> 5 /// <param name="control_parent">父容器</param> 6 /// <param name="RowCount">每一行数量</param> 7 ///
FreeTimeWorker
2020/08/31
2.4K0
《Prometheus监控实战》第8章 监控应用程序
第8章 监控应用程序 首先,考虑的一些高级设计模式和原则 ---- 8.1 应用程序监控入门 应用程序开发中存在一种常见的反模式,即把监控和其他运维功能(如安全性)视为应用程序的增值组件而非核心功能。但监控(和安全性)应该是应用程序的核心功能。如果你要为应用程序构建规范或用户故事,则请把对应用程序每个组件的监控包含进去。不构建指标或监控将存在严重的业务和运营风险,这将导致 无法识别或诊断故障 无法衡量应用程序的运行性能 无法衡量应用程序或组件的业务指标以及成功与否,例如跟踪销售数据或交易价值 另一种常见的反
yeedomliu
2019/12/19
4.7K0
解决 can't find gem cocoapods (>= 0.a) (Gem::GemNotFoundException)
今天 pod install 报错了,记录一下解决方案 报错如下 : /Library/Ruby/Site/2.0.0/rubygems.rb:270:in `find_spec_for_exe': can't find gem cocoapods (>= 0.a) (Gem::GemNotFoundException) from /Library/Ruby/Site/2.0.0/rubygems.rb:298:in `activate_bin_path' from /usr/loca
LinXunFeng
2018/06/29
8.6K0
点击加载更多

相似问题

安装"google-api-client“时Ruby On Rails gem依赖冲突

11

如何在Ruby中添加到gem文件?

24

如何将gem依赖项添加到我的ruby gem中

15

将Python脚本添加到Ruby Gem

113

如何使用ruby api gem将图像添加到shopify集合中

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文