SQLiteDatabase是Android SDK中操作数据库的核心类之一。使用SQLiteDatabase可以打开数据库,也可以对数据库进行操作。然而为了数据库升级的需要以及使用更方便,往往使用SQLiteOpenHelper的子类来完成创建、打开数据库及各种数据库操作。
     SQLiteOpenHelper是个抽象类,在该类中有如下两个抽象方法,SQLiteOpenHelper的子类必须实现这两个方法。
     public abstract void onCreate(SQLiteDatabase db);
     public abstract void onUpdate(SQLiteDatabase db,int oldVersion,int newVersion);
     SQLiteOpenHelper会自动检测数据库文件是否存在。如果存在,会打开这个数据库,在这种情况下就不会调用onCreate()方法。如果数据库文件不存在,SQLiteOpenHelper首先会创建一个数据库文件,然后打开这个数据库,最后调用onCreate()方法。因此,onCreate()方法一般用来在新创建的数据库中建立表、视图等数据库组建。也就是说oncreate()方法在数据库文件第一次创建时调用。
    先看看SQLiteOpenHelper类的构造方法再解释onUpdate()方法何时会被调用。
    public SQLiteOpenHelper(Context context,String name,CursorFactory factory,int version);
    其中name参数表示数据库文件名(不包括文件路径),SQLiteOpenHelper会根据这个文件名创建数据库文件。version表示数据库的版本号。如果当前传入的数据库版本号比上次创建或升级的版本号高,SQLiteOpenHelper就会调用onUpdate()方法。也就是说,当数据库第一次创建时会有一个初始的版本号。当需要对数据库中的表、视图等组建升级时可以增大版本号,再重新创建它们。现在总结一下oncreate()和onUpdate()调用过程。
    1.如果数据库文件不存在,SQLiteOpenHelper在自动创建数据库后会调用oncreate()方法,在该方法中一般需要创建表、视图等组件。在创建前数据库一般是空的,因此不需要先删除数据库中相关的组件。
    2.如果数据库文件存在,并且当前版本号高于上次创建或升级的版本号,SQLiteOpenHelper会调用onUpdate()方法,调用该方法后会更新数据库的版本号。在onupdate()方法中除了创建表、视图等组件外,还需要先删除这些相关的组件,因此,在调用onupdate()方法前,数据库是存在的,里面还原许多数据库组建。
     综合上述两点,可以得出一个结论。如果数据库文件不存在,只有oncreate()被调用(该方法在创建数据库时被调用一次)。如果数据库文件存在,会调用onupdate()方法升级数据库,并更新版本号

转载于:https://www.cnblogs.com/wlfhotte/archive/2011/12/01/2270937.html

SQLiteOpenHelper简介相关推荐

  1. Android 4高级编程(第3版)》

    <Android 4高级编程(第3版)> 基本信息 原书名:Professional Android 4 Application Development 作者: (英)Reto Meier ...

  2. Android 4高级编程(第3版)

    <Android 4高级编程(第3版)> 基本信息 原书名:Professional Android 4 Application Development 作者: (英)Reto Meier ...

  3. 《Android 4高级编程(第3版)》(完整书签).pdf

    下载地址:网盘下载 内容简介 编辑 <Android 4高级编程(第3版)>由Android权威专家编写,涵盖了所有最新的内容,是学习使用Android 4 SDK开发移动应用程序的理想指 ...

  4. Android 数据库(SQLite)【简介、创建、使用(增删改查、事务、实战演练)、数据显示控件(ListView、Adapter、实战演练-绿豆通讯录)】

    目   录 (壹)SQLite数据库简介 (贰)数据库的创建 (叁)数据库的使用 3.1.SQlite的基本操作 3.1.1.添加数据 3.1.2.修改数据 3.1.3.查询数据 3.1.4.删除数据 ...

  5. android绿豆通讯录xml,Android 数据库(SQLite)【简介、创建、使用(增删改查、事务、实战演练)、数据显示控件(ListView、Adapter、实战演练)】...

    目   录 (壹)SQLite数据库简介 (贰)数据库的创建 (叁)数据库的使用 3.1.SQlite的基本操作 3.1.1.添加数据 3.1.2.修改数据 3.1.3.查询数据 3.1.4.删除数据 ...

  6. Android Framework 简介

    Android Framework 简介 简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有详记,结果被很多公司技术人员鄙视了,为了减少自己的短板,重新复习了一遍C++.java.Androi ...

  7. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  8. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  9. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

最新文章

  1. HTTP头部信息解释分析(详细整理)
  2. Angular实现虚拟滚动多选下拉框笔记
  3. python 的下划线_
  4. [渝粤教育] 广东-国家-开放大学 21秋期末考试工程项目管理10324k2
  5. python如何提取图片特征向量_在python中计算图像的特征向量
  6. cad在布局怎么调比例_CAD中如何在布局空间调整图形比例?
  7. ‘catkin_make‘ is currently not installed问题修复
  8. CSS预处理器和后处理器
  9. 捷联惯导系统学习3.3(引力位函数)
  10. 瑞星杀毒软件 奇虎360杀毒软件 360卫士 百度卫士联手,搞不定弹出广告 恶意广告图标
  11. 什么算法计算地图上从A点到B点的方向?
  12. 嵌入式系统一般用c语言编写,ARM嵌入式系统C语言编程
  13. 报错invalid operands to binary expression (const char * and const char[9])
  14. TWS耳机供应链,看看背后都有谁?
  15. oracle数据库用户状态失效Expired
  16. 使用hibernate映射oracle两个表空间的表,Hibernate每个具体类一张表映射(使用XML)
  17. 表单提交 onsubmit=return false
  18. MinIO中上传缩略图
  19. 从电商平台到新经济体 阿里如何创造36810000个工作岗位?
  20. 指南针 android gps,北斗GPS指南针app

热门文章

  1. 为RecyclerView添加下拉刷新(PullToRefresh)功能
  2. 记录一下Struts2升级遇到的问题
  3. 关联查询一张小表。对性能有影响吗(mysql)
  4. Oracle基本概念与数据导入
  5. 【转】为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换?...
  6. Quartz.Net进阶之二:关于触发器的更多信息
  7. 长脖子鹿省选模拟赛 [LnOI2019SP]快速多项式变换(FPT)
  8. [ZJOI2008] 树的统计(树链剖分)
  9. 今天一早来打开IDEA,全面飘红,所有的含有import语句的文件都会报错
  10. NOIP2011 聪明的质监员