Android GreenDao数据库升级(附Demo)

在这里插入图片描述

前言

       大家好久不见,一转眼马上八月份下旬了,最近由于工作比较忙,没时间给大家更新博文。百忙之中抽出时间,给大家来更新一篇关于GreenDao3+数据库的升级

       关于GreenDao的详细介绍以及一些逻辑性的增、删、改、查等,可以参考我去年写的一篇文章,《Android GreenDao 3.2.2的详解以及实战(附Demo)》
在这里插入图片描述


       在版本迭代时,我们经常需要对数据库进行升级,而GreenDao默认的DaoMaster.DevOpenHelper在进行数据升级时,会把旧表删除,然后创建新表,并没有迁移旧数据到新表中,从而造成数据丢失。

       这在实际开发项目应用中是不可取的,因此我们需要作出调整。

       当然了在此之前,自己也调研并且咨询了一下度娘,发现好多文章写的比较杂乱,最终按照实际操作之后也并没有达到预期效果,但是大部分都是对于数据库版本升级都是在onUpgrade(Database db,int olbVersion,int newVersion)方法中进行处理的。

       最终也并不是没有解决办法,网上有不少关于MigrationHelper的源码,它主要是通过创建一个临时表,将旧表的数据迁移到新表中,大家可以自行去百度看源码吧。接下来,说一下我个人实际操作吧!

项目实战

这里用的是于卫国大佬封装好的GreenDaoUpgradeHelper
它是一个GreenDao的数据库升级帮助类
使用它可以很容易解决数据库升级问题,并且只需要一行代码。
https://github.com/yuweiguocn/GreenDaoUpgradeHelper

1、导入依赖implementation 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v2.1.0'

2、新建一个类,继承DaoMaster.OpenHelper,重写onUpgrade(Database db,int olbVersion,int newVersion)方法,在该方法中使用MigrationHelper进行数据库升级以及数据迁移。

 MigrationHelper.migrate(Database db, new MigrationHelper.ReCreateAllTableListener() {}, xxxDao.class);

db:数据库操作对象
ReCreateAllTableListener:重新创建表的监听器
xxxDao.class:对应bean的数据库操作对象

public class MyOpenHelper extends DaoMaster.OpenHelper {public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {super(context, name, factory);}@Overridepublic void onUpgrade(Database db, int oldVersion, int newVersion) {//把需要管理的数据库表DAO作为最后一个参数传入到方法中MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() {@Overridepublic void onCreateAllTables(Database db, boolean ifNotExists) {DaoMaster.createAllTables(db, ifNotExists);}@Overridepublic void onDropAllTables(Database db, boolean ifExists) {DaoMaster.dropAllTables(db, ifExists);}}, RecordBeanDao.class);// 修改beanDao对象}
}

3、在数据库初始化的地方,使用MyOpenHelper替代DaoMaster.DevOpenHelper来进行创建数据库等操作。

//封装数据库的创建、更新、删除
MyOpenHelper openHelper = new MyOpenHelper(AppApplication.getContext(),DB_NAME,null);
//获取数据库
SQLiteDatabase mDb = openHelper.getWritableDatabase();
//封装数据库中表的创建、更新、删除
DaoMaster mDaoMaster = new DaoMaster(mDb);  //合起来就是对数据库的操作
//对表操作的对象。
DaoSession mSession = mDaoMaster.newSession(); //可以认为是对数据的操作

4、修改实体对象的字段

 @Entitypublic class RecordBean {@Idprivate Long id;private String name;private String age; // 添加的字段

5、执行编译(重点),目的让bean对象重新生成配置信息和Dao类。

6、修改app下的gradle数据库信息,build.gradle中数据库的版本号schemaVersion,递增加1即可,最后运行app。

 greendao {// 数据库版本号,升级时及时修改schemaVersion 2daoPackage 'com.harry.greendaomaster.greendao.gen' // 设置DaoMaster、DaoSession、Dao包名targetGenDir 'src/main/java' // 设置DaoMaster、DaoSession、Dao目录}

最后

       经过实际项目应用中,发现无论是删除表单也好,还是修改或者删除表单字段也好,都实测有效。并且,旧数据也会做保留不会丢失。

最后,这是我个人项目中的需求,大家也需要按照个人需求来实际开发。欢迎大家,留言探讨,共同学习!

项目地址:Android GreenDao数据库升级

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/80681.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python快速入门体验

Python快速入门体验 一、环境信息1.1 硬件信息1.2 软件信息 二、Conda安装2.1 Conda介绍2.1.1 Conda简介2.1.2 Conda、Anaconda及Miniconda及的关系 2.2 Conda安装包下载2.2.1 Miniconda下载2.2.2 Anconda下载 2.3 Conda安装2.3.1 Miniconda安装2.3.2 Anconda安装 2.4 Conda初始…

RabbitMQ---work消息模型

1、work消息模型 工作队列或者竞争消费者模式 在第一篇教程中,我们编写了一个程序,从一个命名队列中发送并接受消息。在这里,我们将创建一个工作队列,在多个工作者之间分配耗时任务。 工作队列,又称任务队列。主要思…

为什么网络互联地址设置为30位地址

对于点对点链路,为了节约IPv4地址,一般为其分配/30地址块,这样包含4个地址:最小地址作为网络地址,最大地址作为广播地址,剩余两个可分配地址,分配给链路两端的接口,这是最普遍的方法…

Pandas学习笔记

Pandas数据分析处理库 数据预处理 导入一份泰坦尼克号乘客数据 df.head()展示读取数据,默认读取前5行 df.tail()默认读取后5行 df.head(10)读取前10行DataFrame结构 Pandas工具包的基础结构,二维矩阵结构,行表示数据样本,列表示…

解决nginx的负载均衡下上传webshell的问题

目录 环境 问题 访问的ip会变动 执行命令的服务器未知 上传大文件损坏 深入内网 解决方案 环境 ps :现在已经拿下服务器了,要解决的是负载均衡问题, 以下是docker环境: 链接: https://pan.baidu.com/s/1cjMfyFbb50NuUtk6JNfXNQ?pwd1aqw 提…

密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC

SHA-256 SHA-2是广泛应用的哈希函数,并且有不同的版本,这篇博客主要介绍SHA-256。 SHA-256算法满足了哈希函数的三个安全属性: 抗第一原像性 - 无法根据哈希函数的输出恢复其对应的输入。抗第二原像性 - 给定一个输入和它的哈希值&#xf…

回归预测 | MATLAB实现DBN-ELM深度置信网络结合极限学习机多输入单输出回归预测

回归预测 | MATLAB实现DBN-ELM深度置信网络结合极限学习机多输入单输出回归预测 目录 回归预测 | MATLAB实现DBN-ELM深度置信网络结合极限学习机多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现DBN-ELM深度置信网络结合极限学习…

如何深入理解 Node.js 中的流(Streams)

Node.js是一个强大的允许开发人员构建可扩展和高效的应用程序。Node.js的一个关键特性是其内置对流的支持。流是Node.js中的一个基本概念,它能够实现高效的数据处理,特别是在处理大量信息或实时处理数据时。 在本文中,我们将探讨Node.js中的流…

计算机竞赛 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖,适合作为竞…

【Cortex-M3权威指南】学习笔记1 - 概览与基础

介绍 三种主流 Cortex 款式 款式 A:设计用于高性能的“开放应用平台” 款式 R:用于高端的嵌入式系统,尤其是那些带有实时要求的 款式 M:用于深度嵌入的,单片机风格的系统中 指令集发展 ARM 处理器一直支持两种形式上…

【Unity自制手册】游戏基础API大全

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

Eduma主题 - 线上教育WordPress主题/网站

Eduma主题 – 线上教育WordPress主题是为教育网站、LMS、培训中心、课程中心、学院、大学、学校、幼儿园而制作的。基于我们使用以前的主题eLearning WP构建WordPress LMS的经验,Education WP是下一代,也是围绕WordPress最好的教育主题之一,它…