SQLiteOpenHelper SQLiteDatabase ContentProvider三者的关系
SQLiteOpenHelper类
synchronized void | close()
Close any open database object.
|
synchronized SQLiteDatabase | getReadableDatabase()
Create and/or open a database.
|
synchronized SQLiteDatabase | getWritableDatabase()
Create and/or open a database that will be used for reading and writing.
|
abstract void | onCreate(SQLiteDatabase db)(在派生类中必须被重写)
Called when the database is created for the first time.
|
void | onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)
Called when the database needs to be downgraded.
|
void | onOpen(SQLiteDatabase db)
Called when the database has been opened.
|
abstract void | onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)(在派生类中必须被重写)
Called when the database needs to be upgraded.
|
它提供了两个重要的方法,分别是
onCreate(SQLiteDatabase db):用户初次使用软件时生成数据库,一旦数据库存在则不会调用此方法。函数是在第一次创建数据库的时候执行的,仅仅生成DataBaseHelper对象(SQLiteOpenHelper类型)的时候是不会调用该函数的,而只有当调用DataBaseHelper对象的getReadableDataBase时或者是调用了getWritableDataBase时,如果是第一次创建数据库,那么就一定会调用onCreate()函数。
onUpgrade(SQLiteDatabase db,int oldVersion,int vewVersion):用于升级软件时更新数据库表结构,如增加表、列字段等操作。
提示一下,在软件升级前,最好对原有数据进行备份,在新表建好后把数据导入新表中。
实现了这两个方法,就可以用它的getWritableDatabase()和getReadableDatabase()来获得数据库(SQLiteDatabase 对象)。
强调下:当第一次创建数据库时,当实现DataBaseHelper对象的getReadableDataBase时或者是调用了getWritableDataBase时,系统自动调用oncreater()方法(当然程序中也可以调用);
如果用户需要升级数据库表结构,需要主动调用onUpgrade(SQLiteDatabase db,int oldVersion,int vewVersion),传入一个新的版本的号。
继承该类并覆盖onCreate,onUpgrade,onOpen(可选)。我们可以创建或打开数据库,并对其进行升级。通过getReadableDataBase和getWritableDataBase获取SQliteDataBase实例。通过close关闭数据库。
SQLiteDatabase 类:
SQLiteDatabase是关于数据库操作,封装了管理数据库的各种方法,包括insert 、delete、 update 、query 、执行SQL命令等操作。
其beginTransaction(),endTransaction()方法封装了开始及停止一个事务的相关SQL命令,yieldfContended()方法将暂停当前事务的运行已让其它等待线程执行。当该方法返回时,一个未标记为成功的新事务将被创建。
setMaximunSize(long)用于设置数据库文件的最大长度。
compileStatement(String)将一个SQL命令字符串转换为SQliteStatement对象,用于后续管理或执行。query()执行指定的SQL语句进行查询,并返回cursor作为结果。get/setVersion()获取霍设置数据库版本号。
insert(),update(),delete()执行数据库记录插入、更新、删除等工作。
execSQL() 执行一条非查询类型的SQL命令,如:创建表,删除记录等。
setLocal()设置数据库的local。
可惜美中不足的是:
1. 其不支持创建数据库
2. 其不支持版本更新 或者说其不知道如何做 因为具体数据的差异
鉴于以上的缺陷,有一个辅助类可以完成上面功能,那就是:SQLiteOpenHelper
获得了SQLiteDatabase对象以后,我们就可以通过调用SQLiteDatabase的实例方法来对数据库进行操作了(通常,在ContentProvider派生类对象中,有一个SQLiteOpenHelper实例,通过SQLiteOpenHelper实例的getWritableDataBase或getReadableDataBase方法可以得到SQLiteDatabase对象实例)。
ContentProvider类
待续。。。