Android中SQLite之SQLiteOpenHelper详解
来源:互联网 发布:web软件开发费用 编辑:程序博客网 时间:2024/05/29 11:18
文章转自:http://blog.sina.com.cn/s/blog_798c1d510101dmdd.html
类概述
一个帮助类,帮助创建数据库和数据库版本管理。使用必须创建一个子类来实现其onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int)方法,同时任意实现onOpen(SQLiteDatabase)方法,同时打开数据库操作必须保证数据库存在,如果不存在则创建它,并且对其必要的升级,维护其保持一个最佳的状态。
使用本类提供内容开始创建数据库是非常容易的,首先必须对数据库进行升级,以避免在数据库启动后长期使用而阻塞数据。
注意:这个类假定升级的版本号是单调递增的。
构造函数
public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
创建一个帮助对象,打开或者管理数据库。该方法通常快速返回。数据库并没有实际创建或打开,直到getWritableDatabase() 或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)
创建一个帮助对象,打开或者管理数据库。该方法通常快速返回。数据库并没有实际创建或打开,直到getWritableDatabase() 或getReadableDatabase()其中一个被调用。
参数
context 用来打开或创建数据库
name 数据库文件名,对一个在内存中的数据库而言是null
factory 用来创建对象游标,或者默认为null
version 数据库的序号(从1开始);如果数据库是的,onUpgrade(SQLiteDataBase,int,int)会被调用去升级数据库;如果数据库是新的,onDowngrade(SQLiteDatabase,int,int)会被调用去降级数据库。
errorHandler 当sqlite报告一个数据库毁坏错误时,DatabaseErrorHandler会被使用。
公共方法
public synchronized void close ()
关闭任何打开的数据库对象。
public String getDatabaseName ()
返回正被打开的通过构造函数传递进来的SQLite数据库的名字。
public synchronized SQLiteDatabase getReadableDatabase ()
创建或打开一个数据库。这和getWritableDatabase()返回的对象是同一个,除非一些因素要求数据库只能以read-only的方式被打开,比如磁盘满了。在这种情况下,一个只读的数据库对象将被返回。如果这个问题被修改掉,将来调用getWritableDatabase()就可能成功,而这时read-only数据库对象将被关闭,并且读写对象将被返回。
像getWritableDatabase(),这个方法需要很长时间才返回,所以你不该在应用程序的主线程中调用它,包括方法ContentProvider.onCreate()。
返回值
一个有效的数据库对象,直到getWritableDatabase() or close() 被调用
异常
SQLiteException 如果数据库不能被打开
public synchronized SQLiteDatabase getWritableDatabase ()
创建或打开一个数据库,用于读写。该方法第一次被调用的时候,数据库被打开,并且onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int) 或onOpen(SQLiteDatabase)将被调用。
一旦成功打开,数据库将被缓存,所以需要写入数据的时候你可以调用这个方法。(当你不再需要这个数据库的时候,确保调用close())。像不健康的许可或磁盘已满等错误都可能导致该方法是不,但是如果该问题被解决,将来的尝试可能会成功。
数据库升级可能会话费很长的时间,所以你不该在应用程序的主线程中调用它,包括方法ContentProvider.onCreate()。
返回值
一个有效的读写数据库对象直到close()被调用。
异常
SQLiteException 如果数据库不能被打开用于写入
public abstract void onCreate (SQLiteDatabase db)
当第一次创建数据库时调用。表格的创建和初始化表格的个数在这里完成。
参数
db 数据库
public void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion)
当数据库需要降低版本时候调用。这个方法跟onUpgrade()很相似,但是只要当然版本比被请求的更新,它就会被调用。尽管如此,这个方法不是抽象的,所以它并不强制用户去实现它。如果不被重写,默认的实现将会拒绝降级并且抛出一个SQLiteException。
参数
db 数据库
oldVersionThe 旧版本数据库
newVersionThe 新版本数据库
public void onOpen (SQLiteDatabase db)
当数据库打开时调用。这个实现会在升级数据库之前会检查isReadOnly()。
参数
db 数据库
public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)
当数据库升级时调用。这个实现需要使用该方法去丢弃表格,增加表格,或者做一些其它事情,它需要升级到新的计划中的版本。
SQLite ALTER TABLE文档可以在这找到。如果你添加新的列,你可以使用ALTER TABLE 去把它们插入到活着的表格中。如果你重命名或移动列,你可以使用ALTER TABLE去重命名这些旧的表格,然后创建新的表格,之后把旧表格的数据放到新的表格上。
参数
db 数据库
oldVersionThe 旧版本数据库
newVersionThe 新版本数据库
0 0
- Android中SQLite之SQLiteOpenHelper详解
- Android中SQLite之SQLiteOpenHelper详解
- Android SQLite操作之“SQLiteOpenHelper”
- android SQLite具体实例应用详解(SQLiteOpenHelper)
- Android SQLite数据库之三,SQLiteOpenHelper
- 【android】SQLite数据库之SQLiteOpenHelper与SQLiteDatabase
- Android之Sqlite,SQLiteOpenHelper的使用
- Android中继承SQLiteOpenHelper调用Sqlite数据库
- Android中SQLite开发详解(四)SQLiteOpenHelper 类和SQLiteDatabase类介绍
- android SQLite SQLiteOpenHelper
- Android-SQLite和SQLiteOpenHelper
- Android数据库SQLite使用详解一 : SQLiteOpenHelper详解
- Android之SQLite开发(2)—SQLiteOpenHelper类
- (4.1.29.1)Android 操作SQLite基本用法之SQLiteOpenHelper
- android 之SQLite使用SQLiteOpenHelper对数据库操作
- andriod之SQLite--SQLiteOpenHelper用法
- 《一》Android 数据库 SQlite SQLiteOpenHelper
- 《二》Android 数据库 SQlite SQLiteOpenHelper
- IDFA ASIdentifierManager 被拒问题整理分析
- 用 ObjectiveSugar 扩展NSArray NSDictionary NSSet NSNumber
- MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
- pm_suspend流程
- hibernate 调用存储过程
- Android中SQLite之SQLiteOpenHelper详解
- PHP+MySQL存储数据出现中文乱码的问题
- 对联一幅---诞旦的忧伤
- zoj 1115 Digital Roots
- 充满荆棘的专家程序员之道
- ios7下setViewControllers的问题
- SQL语句
- 关于myeclipe的java web 项目如何更改项目名称的问题
- 补血良方 核桃红枣阿胶糕