如果版本升级,表中新增了某个字段,如何在不删除表的情况下顺利过渡,如果不做处理,数据库就会报错,没有新添加的列。修改数据库的创建方式,实现升级接口。

 1 db = DbUtils.create(context, "myXutils.sqlite",
 2                 DBVERSION, new DbUpgradeListener() {
 3
 4                     @Override
 5                     public void onUpgrade(DbUtils db, int oldVersion,
 6                             int newVersion) {
 7                         if (newVersion > oldVersion) {
 8                             updateDb(db, "mytable");
 9                         }
10                     }
11                 });

 1 protected void updateDb(DbUtils db, String tableName) {
 2         try {
 3             // 把要使用的类加载到内存中,并且把有关这个类的所有信息都存放到对象c中
 4             Class<EntityBase> c = (Class<EntityBase>) Class
 5                     .forName("com.myxutils.entity" + tableName);
 6             if (db.tableIsExist(c)) {
 7                 List<String> dbList = new ArrayList<String>();
 8                 String sql = "select * from" + tableName;
 9                 Cursor cursor = db.execQuery(sql);
10                 int count = cursor.getColumnCount();
11                 for (int i = 0; i < count; i++) {
12                     dbList.add(cursor.getColumnName(i));
13                 }
14                 cursor.close();
15                 // 把属性的信息提取出来,并且存放到field类的对象中,因为每个field的对象只能存放一个属性的信息所以要用数组去接收
16                 Field f[] = c.getDeclaredFields();
17                 for (int i = 0; i < f.length; i++) {
18                     String fildName = f[i].getName();
19                     if (fildName.equals("serialVersionUID")) {
20                         continue;
21                     }
22                     String fildType = f[i].getType().toString();
23                     if (!dbList.contains(fildName)) {
24                         if (fildType.equals("class.Java.lang.String")) {
25                             db.execNonQuery("alter table " + tableName + "add"
26                                     + fildName + "TEXT");
27                         } else if (fildType.equals("int")
28                                 || fildType.equals("long")
29                                 || fildType.equals("boolean")) {
30                             db.execNonQuery("alter table " + tableName + "add"
31                                     + fildName + "INTEGER");
32                         }
33                     }
34                 }
35             }
36         } catch (ClassNotFoundException e) {
37             e.printStackTrace();
38         } catch (DbException e) {
39             e.printStackTrace();
40         }
41
42     }

转载于:https://www.cnblogs.com/tutuskys/p/5089290.html

DButils数据库升级不丢失数据相关推荐

  1. 数据错误循环冗余检查是什么意思_数据库为什么会丢失数据

    数据库管理系统在今天已经是软件的重要组成部分,开源的 MySQL.PostgreSQL 以及商业化的 Oracle 等数据库已经随处可见,几乎所有的服务都需要依赖数据库管理系统存储数据. 图 1 - ...

  2. GreenDao 数据库 升级 保留之前数据

    很久没写博客了,最近一直很忙,没时间整理,一些内容都保存到草稿箱了,但是比较乱,需要整理后才能发,今天抽时间挑出来一篇,全是源码,描述的内容很少(基本没有,除了代码中的一些注解),相信能用到的朋友一看 ...

  3. 为什么数据库会丢失数据?

    数据库管理系统在今天已经是软件的重要组成部分,开源的 MySQL.PostgreSQL 以及商业化的 Oracle 等数据库已经随处可见,几乎所有的服务都需要依赖数据库管理系统存储数据. 数据库不会丢 ...

  4. 数据错误循环冗余检查是什么意思_为什么数据库会丢失数据?今天我就来跟你掰扯掰扯

    这份分布式一致性算法文档,足够你解决分布式系统 80% 核心问题​zhuanlan.zhihu.com 从远程办公到简历被拒,再到斩获阿里offer,这份PDF功不可没​zhuanlan.zhihu. ...

  5. Android版本升级同时Sqlite数据库的升级及之前数据的保留-转

    http://www.cnblogs.com/wang340/archive/2013/05/06/3063135.html http://www.eoeandroid.com/forum.php?m ...

  6. RMAN数据库恢复 之归档模式有(无)备份-丢失数据文件的恢复

    1.归档模式有备份,丢失数据文件的恢复 归档模式有备份,不管丢失什么数据文件,直接在RMAN下RESTOER--->RECOVER--->OPEN即可. RMAN> STARUP M ...

  7. 数据库篇之[bsp_advertpositions]数据表-BrnShop1.9升级至2.1升级说明(非官方版本)...

    数据库篇之[bsp_advertpositions]数据表 主要描述在数据库方面进行升级(使用前请参照网上商城BrnShop1.9升级至2.1升级说明(非官方版本仅提供技术交流)的使用协议) 主要看下 ...

  8. 从0开始弄一个面向OC数据库(三)--数据库升级,数据迁移,删除数据

    前言 首先,在上一篇文章从0开始弄一个面向OC数据库(二),讲解了如何向数据库保存或更新一个模型.如何查询数据库里面的数据.其次,本篇要说的内容有: 数据库更新.数据迁移. 删除数据 使用场景: 随着 ...

  9. 安装计算机更新会不会丢失东西,如何在升级或是重新安装macOS后不丢失数据

    Hugh 于 2020/12/04更新 Mac数据恢复 摘要 只要有新的macOS出来就需要重新安装macOS.需要升级或重新安装macOS时,最不希望发生的就是丢失计算机上的数据.要在不丢失资料的情 ...

最新文章

  1. Linux命令学习总结:hexdump
  2. java spring框架 注解_史上最全的java spring注解
  3. 吐槽小程序开发踩过的坑,以及一些解决方法
  4. 【机器学习】周志华 读书笔记 第一章 绪论
  5. C#3.0语法新特性集合
  6. 【Chocolatey】查找包
  7. keepalived(9)——sorry_server
  8. 从扁平到立体:Windows 10 图标的演化
  9. Mysql和Oracle获取自增主键
  10. 部署在SAP云平台上的应用, 该如何解决跨域问题Cross Domain
  11. 什么是用户账户?-联科教育
  12. asp.net2.0自定义控件---鼠标移到按钮上更改背景颜色,移出后恢复
  13. MovieLens 1M 数据集
  14. srs之服务搭建+OBS推流(简单记录)
  15. leetcode每日一题2021.7.14【1818. 绝对差值和】
  16. 怎么调节台式计算机字体大小,电脑上怎么调整字体大小
  17. 经典贪吃蛇大战逆向_游戏内购
  18. 月饼事件技术还原 - 用js+Chorme来做抢电商的东西吧
  19. 北大oj百练-1003
  20. 何夕 - 六道众生·何夕科幻自选集(2014年1月31日)

热门文章

  1. 超图桌面开发VC++ 入门程序
  2. Spring.NET 学习总结
  3. IOS操作数据库总结
  4. SSRS:使用SQL2008教程学习Reporting Services之数据库AdventureWorks2008问题_学习笔记1
  5. MySQL 慢查询优化
  6. selenium3+python-多窗口、句柄(handle)
  7. MySQL服务安装和可视化工具安装
  8. 转:Linux实时将所有输出重定向到文件
  9. springboot oauth2登录成功处理器_Spring Boot Security 整合 OAuth2 设计安全API接口服务...
  10. python换成中文版_在python中如何将“\”替换为“/”?