Most visited

Recently visited

Added in API level 1

SQLiteOpenHelper

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 /目录中。

注意:此类假定升级版本号单调递增。

Summary

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

Public constructors

SQLiteOpenHelper

Added in API level 1
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

Added in API level 11
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.

Public methods

close

Added in API level 1
void close ()

关闭任何打开的数据库对象

getDatabaseName

Added in API level 14
String getDatabaseName ()

返回正在向构造函数提供的SQLite数据库的名称。

Returns
String

getReadableDatabase

Added in API level 1
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

getWritableDatabase

Added in API level 1
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

onConfigure

Added in API level 16
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.

onCreate

Added in API level 1
void onCreate (SQLiteDatabase db)

第一次创建数据库时调用。 这是创建表格和表格的初始人口应该发生的地方。

Parameters
db SQLiteDatabase: The database.

onDowngrade

Added in API level 11
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.

onOpen

Added in API level 1
void onOpen (SQLiteDatabase db)

数据库打开时调用。 在更新数据库之前,实现应检查isReadOnly()

在数据库连接已经配置并且数据库模式已经创建,升级或降级之后调用此方法。 如果在创建,升级或降级模式之前必须以某种方式配置数据库连接,请改为在onConfigure(SQLiteDatabase)

Parameters
db SQLiteDatabase: The database.

onUpgrade

Added in API level 1
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.

setWriteAheadLoggingEnabled

Added in API level 16
void setWriteAheadLoggingEnabled (boolean enabled)

启用或禁用数据库的预写日志记录的使用。 预写式日志记录不能用于只读数据库,因此如果数据库以只读方式打开,则忽略该标志的值。

Parameters
enabled boolean: True if write-ahead logging should be enabled, false if it should be disabled.

也可以看看:

Hooray!