public abstract class SQLiteOpenHelper
extends Object
java.lang.Object | |
↳ | android.database.sqlite.SQLiteOpenHelper |
管理数据库创建和版本管理的助手类。
创建实现子类onCreate(SQLiteDatabase)
, onUpgrade(SQLiteDatabase, int, int)
和可选onOpen(SQLiteDatabase)
,这个类需要打开数据库,如果它存在,如果它不创建它,并在必要时对其进行升级的照顾。 事务用于确保数据库始终处于明智状态。
该类使得 ContentProvider
实现可以轻松实现在首次使用之前打开和升级数据库,以避免阻止长时间运行数据库升级的应用程序启动。
有关示例,请参阅NotePad示例应用程序中的NotePadProvider类,位于SDK的 samples /目录中。
注意:此类假定升级版本号单调递增。
Public constructors |
|
---|---|
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 创建一个帮助对象来创建,打开和/或管理数据库。 |
|
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) 创建一个帮助对象来创建,打开和/或管理数据库。 |
Public methods |
|
---|---|
void |
close() 关闭任何打开的数据库对象 |
String |
getDatabaseName() 返回正在向构造函数提供的SQLite数据库的名称。 |
SQLiteDatabase |
getReadableDatabase() 创建和/或打开数据库。 |
SQLiteDatabase |
getWritableDatabase() 创建和/或打开将用于读取和写入的数据库。 |
void |
onConfigure(SQLiteDatabase db) 在配置数据库连接时调用,以启用诸如预写日志或外键支持等功能。 |
abstract void |
onCreate(SQLiteDatabase db) 第一次创建数据库时调用。 |
void |
onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) 当数据库需要降级时调用。 |
void |
onOpen(SQLiteDatabase db) 数据库打开时调用。 |
abstract void |
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 当数据库需要升级时调用。 |
void |
setWriteAheadLoggingEnabled(boolean enabled) 启用或禁用数据库的预写日志记录的使用。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
创建一个帮助对象来创建,打开和/或管理数据库。 这种方法总是很快返回。 在调用getWritableDatabase()
或getReadableDatabase()
之一之前,数据库实际上并未创建或打开。
Parameters | |
---|---|
context |
Context : to use to open or create the database |
name |
String : of the database file, or null for an in-memory database |
factory |
SQLiteDatabase.CursorFactory : to use for creating cursor objects, or null for the default |
version |
int : number of the database (starting at 1); if the database is older, onUpgrade(SQLiteDatabase, int, int) will be used to upgrade the database; if the database is newer, onDowngrade(SQLiteDatabase, int, int) will be used to downgrade the database |
SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler)
创建一个帮助对象来创建,打开和/或管理数据库。 在调用getWritableDatabase()
或getReadableDatabase()
之一之前,数据库实际上并未创建或打开。
接受输入参数:当sqlite报告数据库损坏时,用于处理腐败的具体实例 DatabaseErrorHandler
。
Parameters | |
---|---|
context |
Context : to use to open or create the database |
name |
String : of the database file, or null for an in-memory database |
factory |
SQLiteDatabase.CursorFactory : to use for creating cursor objects, or null for the default |
version |
int : number of the database (starting at 1); if the database is older, onUpgrade(SQLiteDatabase, int, int) will be used to upgrade the database; if the database is newer, onDowngrade(SQLiteDatabase, int, int) will be used to downgrade the database |
errorHandler |
DatabaseErrorHandler : the DatabaseErrorHandler to be used when sqlite reports database corruption, or null to use the default error handler. |
String getDatabaseName ()
返回正在向构造函数提供的SQLite数据库的名称。
Returns | |
---|---|
String |
SQLiteDatabase getReadableDatabase ()
创建和/或打开数据库。 这将是由getWritableDatabase()
返回的相同对象,除非某些问题(如完整磁盘)要求数据库以只读方式打开。 在这种情况下,将返回一个只读数据库对象。 如果问题得到解决,将来可能会调用getWritableDatabase()
,在这种情况下,只读数据库对象将被关闭,并且将来会返回读/写对象。
与 getWritableDatabase()
一样,此方法可能需要很长时间才能返回,因此您不应该从应用程序主线程调用它,包括从 ContentProvider.onCreate()
。
Returns | |
---|---|
SQLiteDatabase |
a database object valid until getWritableDatabase() or close() is called. |
Throws | |
---|---|
SQLiteException |
if the database cannot be opened |
SQLiteDatabase getWritableDatabase ()
创建和/或打开将用于读取和写入的数据库。 第一次调用时,数据库将被打开并onCreate(SQLiteDatabase)
onUpgrade(SQLiteDatabase, int, int)
和/或onOpen(SQLiteDatabase)
。
一旦打开成功,数据库将被缓存,因此每次需要写入数据库时都可以调用此方法。 (确保在不再需要数据库时调用close()
)错误的权限或完整的磁盘可能会导致此方法失败,但如果问题得到解决,未来的尝试可能会成功。
数据库升级可能需要很长时间,您不应该从应用程序主线程调用此方法,包括从 ContentProvider.onCreate()
。
Returns | |
---|---|
SQLiteDatabase |
a read/write database object valid until close() is called |
Throws | |
---|---|
SQLiteException |
if the database cannot be opened for writing |
void onConfigure (SQLiteDatabase db)
在配置数据库连接时调用,以启用诸如预写日志或外键支持等功能。
之前,这种方法被称为onCreate(SQLiteDatabase)
, onUpgrade(SQLiteDatabase, int, int)
, onDowngrade(SQLiteDatabase, int, int)
,或onOpen(SQLiteDatabase)
被调用。 除了根据需要配置数据库连接外,它不应修改数据库。
此方法只调用配置数据库连接的参数的方法,如 enableWriteAheadLogging()
setForeignKeyConstraintsEnabled(boolean)
, setLocale(Locale)
, setMaximumSize(long)
,或执行PRAGMA语句。
Parameters | |
---|---|
db |
SQLiteDatabase : The database. |
void onCreate (SQLiteDatabase db)
第一次创建数据库时调用。 这是创建表格和表格的初始人口应该发生的地方。
Parameters | |
---|---|
db |
SQLiteDatabase : The database. |
void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion)
当数据库需要降级时调用。 这与onUpgrade(SQLiteDatabase, int, int)
方法严格相似,但只要当前版本比请求的新版本更新,就会调用onUpgrade(SQLiteDatabase, int, int)
方法。 但是,这种方法不是抽象的,所以客户不一定要实现它。 如果不重写,默认实现将拒绝降级并抛出SQLiteException
此方法在事务中执行。 如果抛出异常,所有更改将自动回滚。
Parameters | |
---|---|
db |
SQLiteDatabase : The database. |
oldVersion |
int : The old database version. |
newVersion |
int : The new database version. |
void onOpen (SQLiteDatabase db)
数据库打开时调用。 在更新数据库之前,实现应检查isReadOnly()
。
在数据库连接已经配置并且数据库模式已经创建,升级或降级之后调用此方法。 如果在创建,升级或降级模式之前必须以某种方式配置数据库连接,请改为在onConfigure(SQLiteDatabase)
。
Parameters | |
---|---|
db |
SQLiteDatabase : The database. |
void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)
当数据库需要升级时调用。 实现应使用此方法删除表,添加表或执行升级到新模式版本所需的任何其他操作。
SQLite ALTER TABLE文档可以找到here 。 如果添加新列,则可以使用ALTER TABLE将它们插入到实时表中。 如果重命名或删除列,则可以使用ALTER TABLE重命名旧表,然后创建新表,然后使用旧表的内容填充新表。
此方法在事务中执行。 如果抛出异常,所有更改将自动回滚。
Parameters | |
---|---|
db |
SQLiteDatabase : The database. |
oldVersion |
int : The old database version. |
newVersion |
int : The new database version. |
void setWriteAheadLoggingEnabled (boolean enabled)
启用或禁用数据库的预写日志记录的使用。 预写式日志记录不能用于只读数据库,因此如果数据库以只读方式打开,则忽略该标志的值。
Parameters | |
---|---|
enabled |
boolean : True if write-ahead logging should be enabled, false if it should be disabled. |
也可以看看: