Android类参考---SQLiteOpenHelper
public 抽象类
SQLiteOpenHelper
继承关系
java.lang.Object
|____android.database.sqlite.SQLiteOpenHelper
类概要
这是一个辅助类,用来管理数据库的创建和数据库的版本。
你要创建一个这个类的子类来实现onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int)方法,以及可选的onOpen(SQLiteDatabase)方法,并且这个类要管理数据库的状态,如果数据库存在,就打开数据库,否则就创建数据库,并且在需要的时候也会更新数据库。使用事务来确保数据库始终在正确的状态中。
这个类让ContentProvider的实现变的容易,它把数据库的打开和升级延迟到第一次使用,从而避免了因升级数据库的长时间运行而造成的应用程序阻塞。
注意:这个类假设用递增的版本号来升级。
Public构造器
public SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CuresorFactory factory, int version)
创建一个辅助对象,用来创建、打开、管理数据库。这个方法始终是快速返回的。在getWriteableDatabase()或getReadableDatabase()方法被调用之前,这个数据库不会实际的被创建。
参数说明:
context:用于打开或创建数据库;
name:指定数据库的文件名,null指定一个内存中的数据库
factory:用于创建游标对象,或默认的null;
version:指定数据库的版本号(从1开始);如果数据库比较旧,onUpgrade(SQLiteDatabase, int, int)方法将用于升级数据库。如果数据库比较新,onDowngrade(SQLiteDatabase, int, int)方法会被用于降级数据库。
public SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler)
创建一个辅助对象,用来创建、打开、管理数据库。这个方法始终是快速返回的。在getWriteableDatabase()或getReadableDatabase()方法被调用之前,这个数据库不会实际的被创建。
接收输入参数:一个具体的DatabaseErrorHandler示例,用于处理SQLite报告的数据库错误。
参数说明:
context:用于打开或创建数据库;
name:指定数据库的文件名,null指定一个内存中的数据库
factory:用于创建游标对象,或默认的null;
version:指定数据库的版本号(从1开始);如果数据库比较旧,onUpgrade(SQLiteDatabase, int, int)方法将用于升级数据库。如果数据库比较新,onDowngrade(SQLiteDatabase, int, int)方法会被用于降级数据库。
errorHandler:该参数被用于SQLite报告数据库错误,或者是null,使用默认错误处理器。
Public方法
public synchronized void close()
关闭打开的数据库对象。
public String getDatabaseName()
返回由构造器传递进来的,正在打开的SQLite数据的名称。
public SQLiteDatabase getReadableDatabase()
创建并(或)打开一个数据库,除非因为某些问题,否则这个方法返回的对象会与getWritableDatabase()方法相同,如在磁盘空间不足的情况下,就会要求数据库以只读的方式被打开,在这种情况下,会返回一个只读的数据库。如果问题被修正,继续调用getWritableDatabase()方法也可以成功,这时只读的数据库对象会被关闭,并且会返回一个读写对象。
getWritableDatabase()方法可能需要很长时间才能返回,因此不应该在应用程序的主线程中调用它,包括ContentProvider.onCreate()方法。
返回值:返回一个数据库对象,直到getWritableDatabase()或close()方法被调用之前,这个对象都是有效的。
异常:如果数据不能够被打开,会抛出SQLiteException异常。
public SQLiteDatabase getWritableDatabase()
创建并(或)打开一个用于读写的数据库。如果是首次调用这个方法,那么该数据将会被打开,并且onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase, int, int)和(或)onOpen(SQLiteDatabase)方法会被调用。
数据库一旦被打开,该数据库就会被缓存,因此在每次需要写数据库时,你都能够调用这个方法。(在不在需要该数据库时,要确保调用close()方法)。诸如没有授权或没有磁盘空间等错误可能会导致这个方法调用失败,但如果这些问题被修正,这个方法就会被调用成功。
注意:数据库升级可能需要很长时间,因此不要在应用程序的主线程中调用这个方法,包括ContentProvider.onCreate()。
返回值:一个读写的数据库对象,直到close()方法被调用才失效。
异常:如果该数据库不能为写入而打开,就会抛出SQLiteException异常。
public void onConfigure()
在配置数据连接时会调用这个方法,确保预写日志或外键支持等功能可用。
这个方法在onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase, int, int),onDowngrade(SQLiteDatabase, int, int)或onOpen(SQLiteDatabase)方法被调用之前被调用。除了配置必要的数据库连接之外,它不应该编辑数据库。
这个方法只应该调用配置数据库连接参数的方法,如enableWriteAheadLogging(),setForeignKeyConstraintsEnabled(boolean),setLocale(Locale),setMaximumSize(long),或者执行PRAGMA语句。
参数:
db:被配置的数据库对象
public abstract void onCreate(SQLiteDatabase db)
数据库被首次创建时,会调用这个方法。这时创建数据库表和表初始化的地方。
参数:
db:要创建的数据库。
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)
当数据库需要被降级时,调用这个方法。这个方法与onUpgrade(SQLiteDatabase, int, int)方法非常相似,但是它是在当前版本比请求的版本新的时候,才会被调用。但是这个方法不是抽象的,因此它不是强制要求客户实现它的。如果这个方法没有被重写,默认的实现会拒绝降级处理,并抛出SQLiteException异常。
这个方法是在事务中执行的。如果有异常被抛出,所有的改变都会被回滚。
参数:
db:指定要降级的数据库
oldVersion:旧的数据库版本
newVersion:新的数据库版本
public void onOpen(SQLiteDatabase db)
数据库被打开时,会调用这个方法。在升级数据库之前,这个方法的实现应该检查数据库是否是只读的(调用isReadOnly()方法)。
数据库连接被配置且数据库策略被创建、升级或必要的降级之后,这个方法会被调用。如果数据库连接必须在策略被创建、升级或降级前做某些设置,那么就要在onConfigure(SQLiteDatabase)方法中来做这些事情。
参数:
db:被打开的数据库。
public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
当数据库需要升级时,会调用这个方法。应该使用这个方法来实现删除表、添加表或者做一些需要升级新的策略版本的事情。
SQLite ALTER TABLE的文档可以在以下网址中找到:
http://sqlite.org/lang_altertable.html
如果要给表添加一个新列,那么使用使用ALTER TABLE能够把新列插入到表中。如果要重命名或删除列,那么你能够使用ALTER TABLE能够重命名旧表,然后,创建一个新表,并把旧表中内容复制到新表中。
这个方法是事务中执行的,如果有异常被抛出,所有的改变都会被自动的回滚。
参数:
db:指定要降级的数据库
oldVersion:旧的数据库版本
newVersion:新的数据库版本
public void setWriteAheadLoggingEnabled(boolean enabled)
启用或禁用数据库的预写日志。预写日志不能被用于只读的数据库,因此如果数据是以只读的方式被打开,这个标记值会被忽略。
参数:
enabled:true:启用预写日志,false:禁用预写日志
参照:enableWriteAheadLogging()方法。
Android类参考---SQLiteOpenHelper的更多相关文章
- Android类参考---Fragment
Android类参考---Fragment public final boolean isAdded() 如果该Fragment对象被添加到了它的Activity中,那么它返回true,否则返回fal ...
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
android SQLite使用SQLiteOpenHelper类对数据库进行操作 原文: http://byandby.iteye.com/blog/835580
- android SQLite使用SQLiteOpenHelper类对数据库进行增删查改
一个简单的例子,当点击按钮时进行相应的操作,效果图如下: 项目代码如下: DatabaseHelper类 package com.example.sqlitedatebasetest; import ...
- Android中使用SQLiteOpenHelper管理SD卡中的数据库
使用Android中自带的SQLiteOpenHelper可以完成数据库的创建与管理,但有两点局限: (1)数据库创建在内存卡中,大小受限,创建位置位于/data/data/应用程序名/databas ...
- [转] - QBuffer类参考
QBuffer类参考 QBuffer类是一个操作QByteArray的输入/输出设备. 详情请见…… #include <qbuffer.h> 继承了QIODevice. 所有成员函数的列 ...
- Inno Setup入门(十六)——Inno Setup类参考(2)
Inno Setup入门(十六)——Inno Setup类参考(2) http://379910987.blog.163.com/blog/static/33523797201112755641236 ...
- Android中的SQLiteOpenHelper类
SQLiteOpenHelper是Android提供的一个管理数据库的工具类,可用于管理数据库的创建和版本更新.一般的用法是创建SQLiteOpenHelper的子类,并扩张它的onCreate(SQ ...
- 分享 Xamarin.android 关于使用SQLiteOpenHelper的小白经验
关于使用SQLiteOpenHelper的使用,对于小白的我,百度啦相当多的大神的介绍,均未能让我这新手(零基础)成功学会,参考了http://www.cnblogs.com/yaozhenfa/p/ ...
- Android编译系统参考手册
build/core/clear_vars.mk Clear out values of all variables used by rule templates 清除LOCAL变量,每个模块的And ...
随机推荐
- AM3358--Uboot支持LCD输出1024*768
1. uboot/include/lcd/tq3358_fb.h #define TFT240320 1 #define TFT320240 2 #define TFT480272 3//T43(天嵌 ...
- The struts dispatcher cannot be found
1.错误描述 严重:Servlet.service() for servlet jsp threw exception The struts dispatcher cannot be found.Th ...
- HttpServletRequest对象
一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...
- EF6CodeFirst+MVC5+Autofac泛型注册 入门实例
贴一个EF6 CodeFirst模式结合MVC5和Autofac(泛型注册)的一个入门实例 网上类似的例子实在太少,最近自己也有用到这一块的知识,总结了一下,不要让后人踩了自己踩过的坑. 1:新建三个 ...
- C#图解教程 第二十三章 预处理指令
预处理指令 什么是预处理指令基本规则#define和#undef指令条件编译条件编译结构诊断指令行号指令区域指令#pragma warning 指令 预处理指令 什么是预处理指令 源代码指定了程序的定 ...
- mysql5.7安装教程
1, 下载mysql5.7的安装包mysql-5.7.17-winx64.zip,直接解压到安装目录 2, 进入mysql目录,在里面新建data目录 3, 修改mysql的my.ini文件,指定ba ...
- [Luogu4074][WC2013]糖果公园
BZOJ权限题!提供洛谷链接 sol 树上带修改莫队 很显然吧.对吧. 所以说树上莫队要怎么写呢? 我们知道莫队=给区间排序+依次暴力处理,所以对于树上莫队而言也是一样的. 序列莫队基于序列分块(也就 ...
- [HNOI2013]游走
题面在这里 题意 从1号点开始等概率选择路径并加上边权,直到到达n号点结束,要求将m条边赋权值1-m使得期望最小 sol 续上文 zsy ycb orz 简单的贪心:求出每条边的期望经过次数,sort ...
- 2014NOIP普及组 子矩阵
觉得题目水的离开 觉得普及组垃圾的请离开 不知道 DFS 和 DP 的请离开 不屑的大佬请离开 ……. 感谢您贡献的访问量 ————————————————华丽的分割线 ——————————————— ...
- Django的models实现分析
1 引子 1.1 神奇的Django中的models 我们先来看一段在Django项目中常用的代码: 设置数据库models代码: class Students(models.Mod ...