public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int new Version)

这个方法在实现时需要重写。

onUpgrade方法会在数据库需要升级的时候调用。可以用来增删表或者其他任何操作。如果你想添加新的列你可以使用ALTER TABLE 插入表中。如果需要重命名或者删掉列,可以使用ALTER TABLE 重命名旧表,然后创建新的表,并将旧表数据添加到新表中。如果抛出异常,将自动回滚。

1. 帮助文档里说的“数据库升级”是指什么?

你开发了一个程序,当前是1.0版本。该程序用到了数据库。到1.1版本时,你在数据库的某个表中增加了一个字段。那么软件1.0版本用的数据库在软件1.1版本就要被升级了。

2. 数据库升级应该注意什么?

软件的1.0版本升级到1.1版本时,老的数据不能丢。那么在1.1版本的程序中就要有地方能够检测出来新的软件版本与老的数据库不兼容,并且能够有办法把1.0软件的数据库升级到1.1软件能够使用的数据库。换句话说,要在1.0软件的数据库的那个表中增加那个字段,并赋予这个字段默认值。

3. 程序如何知道数据库需要升级?

SQLiteOpenHelper类的构造函数有一个参数是int version,它的意思就是指数据库版本号。比如在软件1.0版本中,我们使用SQLiteOpenHelper访问数据库时,该参数为1,那么数据库版本号1就会写在我们的数据库中。

到了1.1版本,我们的数据库需要发生变化,那么我们1.1版本的程序中就要使用一个大于1的整数来构造SQLiteOpenHelper类,用于访问新的数据库,比如2。

当我们的1.1新程序读取1.0版本的老数据库时,就发现老数据库里存储的数据库版本是1,而我们新程序访问它时填的版本号为2,系统就知道数据库需要升级。

4. 何时触发数据库升级?如何升级?

当系统在构造SQLiteOpenHelper类的对象时,如果发现版本号不一样,就会自动调用onUpgrade函数,让你在这里对数据库进行升级。根据上述场景,在这个函数中把老版本数据库的相应表中增加字段,并给每条记录增加默认值即可。

新版本号和老版本号都会作为onUpgrade函数的参数传进来,便于开发者知道数据库应该从哪个版本升级到哪个版本。

升级完成后,数据库会自动存储最新的版本号为当前数据库版本号。

转载于:https://www.cnblogs.com/hainange/p/6153536.html

Android中SQLiteOpenHelper类的onUpgrade方法浅谈相关推荐

  1. java中的类与对象(浅谈)

    java中,用"类"来描述"对象",对象可以是现实世界中的一切事物. 类 可以看成 对相似事物 的抽象. 比如老师和学生,他们都属于对象,他们都有姓名,性别,年 ...

  2. java 中counter什么意思_java容器中的几种计数方法浅谈

    本文讨论java集合容器中的几种元素数量获取的方式,命题很小,但是也足以让我们思考一些东西. 所谓计数:即是给出所在容器的元素总数的方式.一般能想到的就是两种方式:一是使用某个字段直接存储该计数值,二 ...

  3. android sqlite自定义函数,Android中自定义一个View的方法详解

    本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...

  4. android服务绑定异步,Android中异步类AsyncTask用法总结

    本文总结分析了Android中异步类AsyncTask用法.分享给大家供大家参考,具体如下: 最近整理笔记的时候,看到有关AsyncTask不是很理解,重新疏导了一下,有在网上找了一些资料,个人不敢独 ...

  5. colsure php_PHP_PHP中Closure类的使用方法及详解,Closure,匿名函数,又称为Anonym - phpStudy...

    PHP中Closure类的使用方法及详解 Closure,匿名函数,又称为Anonymous functions,是php5.3的时候引入的.匿名函数就是没有定义名字的函数.这点牢牢记住就能理解匿名函 ...

  6. android post方法吗,Android中使用Post请求的方法

    本文实例讲述了Android中使用Post请求的方法.分享给大家供大家参考.具体如下: 一.需要用到的场景 在jQuery中使用$.post()就可以方便的发起一个post请求,在android程序中 ...

  7. 运行配置文件中指定类的指定方法

    案例需求 通过反射运行配置文件中指定类的指定方法 代码实现 public class ReflectTest02 {public static void main(String[] args) thr ...

  8. Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释

    Java中String类的concat方法 在了解concat()之前,首先需要明确的是String的两点特殊性. 长度不可变 值不可变 这两点从源码中对String的声明可以体现: private ...

  9. Android中集成第三方库的方法和问题

    Android中集成第三方库的方法和问题 声明: 1. 本文參考了网上同学们的现有成果,在此表示感谢,參考资料在文后有链接. 2. 本文的重点在第三部分,是在开发中遇到的问题及解决的方法.第一,第二部 ...

最新文章

  1. ArcGIS 基础11-专题制图
  2. rust(16)-数组
  3. cobbler基础安装
  4. leetcode112. 路径总和
  5. 需求条目化:一个让用户故事有效落地的套路
  6. 谷歌有只AI,自动给黑白视频上色,走到哪它都认识你
  7. 关于信号系统的一些笔记
  8. 高拍仪、浏览器获取获取多摄像头,切换摄像头
  9. Atitit mvc之道 attilax著 1. Atitti mvc的几大概念 2 1.1. Dispatcher Controller 2 1.2. 声明式渲染 2 1.3. 条件与循环
  10. glassfish插件_在Eclipse JavaEE开发环境上集成GlassFish开发插件(截图多多)
  11. html 设置td最小宽度,如何设置td标签的宽度和高度
  12. C语言使用结构体给另一个同类型结构体赋值
  13. 【Web】简单的HTML实现百度搜索
  14. 图文并解Word插入修改删除批注
  15. ThreadLocal一次性解决老大难问题
  16. nginx cache 总结
  17. Robin一个专注开发者的组织
  18. [台剧]《倚天屠龙记》永远的经典——孙兴版杨逍
  19. [Android]自定义绘制一个简易的音频条形图,附上对MP3音频波形数据的采集与展现
  20. 2012年北京地铁规划图(我好不容易找到的哦)

热门文章

  1. Teamcenter(Enterprise 2007) 开发之- 快速搭建开发环境(windows)
  2. 动态网站Web开发用什么语言好?PHP、ASP还是ASP.NET
  3. 12月25日服务器例行维护公告,12月25日维护公告 技能修改测试
  4. 作为参数给后端为空_后端 API 接口文档 Swagger 使用指南
  5. sql语句为什么大写居多_懂EXCEL就会SQL,从此查数不求人
  6. c语言五位数大到小排序,刚学c语言,老师让用if编一个五个数字从大到小的排序,有那个大神能帮我,谢谢啦...
  7. 计算机三级嵌入式系统之常考指令
  8. Activiti的BPMN2.0中的子流程
  9. mysql的四个默认数据库是什么版本,MySQL5.7数据库字符集和排序规则有四个级别的默认设置:服务器,数据库,表和列。...
  10. mysql定时异地备份_MYsql 异地备份脚本