SQLiteOpenHelper SQLiteDatabase ContentProvider三者的关系

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类

待续。。。

 

 

 

 

你可能感兴趣的:(ContentProvider)