SQLiteOpenHelper简介
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简介相关推荐
- Android 4高级编程(第3版)》
<Android 4高级编程(第3版)> 基本信息 原书名:Professional Android 4 Application Development 作者: (英)Reto Meier ...
- Android 4高级编程(第3版)
<Android 4高级编程(第3版)> 基本信息 原书名:Professional Android 4 Application Development 作者: (英)Reto Meier ...
- 《Android 4高级编程(第3版)》(完整书签).pdf
下载地址:网盘下载 内容简介 编辑 <Android 4高级编程(第3版)>由Android权威专家编写,涵盖了所有最新的内容,是学习使用Android 4 SDK开发移动应用程序的理想指 ...
- Android 数据库(SQLite)【简介、创建、使用(增删改查、事务、实战演练)、数据显示控件(ListView、Adapter、实战演练-绿豆通讯录)】
目 录 (壹)SQLite数据库简介 (贰)数据库的创建 (叁)数据库的使用 3.1.SQlite的基本操作 3.1.1.添加数据 3.1.2.修改数据 3.1.3.查询数据 3.1.4.删除数据 ...
- android绿豆通讯录xml,Android 数据库(SQLite)【简介、创建、使用(增删改查、事务、实战演练)、数据显示控件(ListView、Adapter、实战演练)】...
目 录 (壹)SQLite数据库简介 (贰)数据库的创建 (叁)数据库的使用 3.1.SQlite的基本操作 3.1.1.添加数据 3.1.2.修改数据 3.1.3.查询数据 3.1.4.删除数据 ...
- Android Framework 简介
Android Framework 简介 简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有详记,结果被很多公司技术人员鄙视了,为了减少自己的短板,重新复习了一遍C++.java.Androi ...
- etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...
- Docker学习(一)-----Docker简介与安装
一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
最新文章
- HTTP头部信息解释分析(详细整理)
- Angular实现虚拟滚动多选下拉框笔记
- python 的下划线_
- [渝粤教育] 广东-国家-开放大学 21秋期末考试工程项目管理10324k2
- python如何提取图片特征向量_在python中计算图像的特征向量
- cad在布局怎么调比例_CAD中如何在布局空间调整图形比例?
- ‘catkin_make‘ is currently not installed问题修复
- CSS预处理器和后处理器
- 捷联惯导系统学习3.3(引力位函数)
- 瑞星杀毒软件 奇虎360杀毒软件 360卫士 百度卫士联手,搞不定弹出广告 恶意广告图标
- 什么算法计算地图上从A点到B点的方向?
- 嵌入式系统一般用c语言编写,ARM嵌入式系统C语言编程
- 报错invalid operands to binary expression (const char * and const char[9])
- TWS耳机供应链,看看背后都有谁?
- oracle数据库用户状态失效Expired
- 使用hibernate映射oracle两个表空间的表,Hibernate每个具体类一张表映射(使用XML)
- 表单提交 onsubmit=return false
- MinIO中上传缩略图
- 从电商平台到新经济体 阿里如何创造36810000个工作岗位?
- 指南针 android gps,北斗GPS指南针app
热门文章
- 为RecyclerView添加下拉刷新(PullToRefresh)功能
- 记录一下Struts2升级遇到的问题
- 关联查询一张小表。对性能有影响吗(mysql)
- Oracle基本概念与数据导入
- 【转】为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换?...
- Quartz.Net进阶之二:关于触发器的更多信息
- 长脖子鹿省选模拟赛 [LnOI2019SP]快速多项式变换(FPT)
- [ZJOI2008] 树的统计(树链剖分)
- 今天一早来打开IDEA,全面飘红,所有的含有import语句的文件都会报错
- NOIP2011 聪明的质监员