android小白表示android并不好学,在不知道该如何学习的情况下将SQLiteOpenHelper的官方文档翻译了一下,不足之处还请指出。转载请注明出处。
SQLiteOpenHelper是管理数据库的创建和版本的帮助类。
创建SQLiteOpenHelper的子类,实现两个基本的方法onCreate(SQLiteDatabase)方法和onUpgrade(SQLiteDatabase,int,int)。选择性地实现onOpen(SQLiteDatabase)方法。在打开数据库的时候,这个类查看数据库是否存在,若不存在则创建,在必要的时候更新数据库,事务保证数据库总是处在一个合理的状态。
构造器:
SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version);
创建一个帮助类来创建、打开或者管理数据库。这个方法执行的很快,除非调用getWritableDatabase()或者是getReadableDatabase(),否则数据库不会真正打开。
context:用来打开或者是建立一个数据库。
name:数据库文件名,或者是null。
factory:用来建立游标对象,或者是传入null。
version:数据库版本号(从1开始)。如果数据库版本比其旧,则onUpgrade()方法更新数据库。如果数据库版本比其新,则onDowngrade()方法会降低数据库版本。
SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version,DatabaseErrorHandler errorHandler);
接受一个输入参数:一个DatabaseErrorHandler的实例,sqlite响应数据库损坏消息时用来解决数据库损坏。
其他的参数作用同上述的构造方法。
errorHandler:当sqlite响应数据库损坏时用的DatabaseErrarHandler,传入null则用默认的错误解决器。
公共方法(public method):
void close():关闭任何打开的database对象。
String getDatabaseName:返回被打开的SQLite数据库的名字。
SQLiteDatabase getReadableDatabase():返回一个database对象,直到getWritableDatabaase()或者是close()被调用。
打开或者是建立并打开一个数据库。除非是有一些问题出现,类似于磁盘已满,需要只读数据库等,否则这个函数将返回一个同getWriteableDatabase()返回的相同的对象。如果问题被解决,getWriteableDatabase()就会被成功调用,只读数据库的对象会被关闭,读写数据库的对象被返回。
同getWriteableDatabase()一样,这个方法会耗费很长的时间,所以不应该在主线程中调用此方法。包括从ContentProvider.onCreate()中调用。
getWriteableDatabase():返回一个读写的数据库对象,直到colose()被调用。
打开或者是建立并打开一个可读可写的数据库。这个函数若是在第一次调用,数据库将被打开并且onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int),onOpen(SQLiteDatabase)将会被调用。
一旦打开成功,数据库便在高速缓存区中存储着,所以我们可以在需要的任何时候来调用这个函数来写数据库(当不用数据库时,确保调用close())。许可条件不足或者是磁盘已满将使这个方法调用失败,但是当问题解决之后,将来的尝试将会成功。
void onConfigure(SQLiteDatabase db):当数据库连接形成后被调用。使一些特性例如预写式日志或者是外键得到支持。
这个方法在onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int),onDowngrade(SQLiteDatabase,int,int),或者是onOpen(SQLiteDatabase)方法调用之前调用。除非数据库连接的需要,不可以更改数据库。
此方法只应该调用形成数据库连接参数的方法,如enableWriteAheadLogging(),setForeignKeyConstraintsEnable(boolean),setLocale(locale),setMaximumSize(long),或者是执行编译指令语句。
abstract void onCreate(SQLiteDatabase db):在数据库第一次建立的时候调用。这里是建立表和初始化表中成员的地方。
void onDowngrade(SQLiteDatabase db,int oldVersion,int newVersion):当数据库需要被降低版本的时候调用。这个函数与onUpgrade(SQLiteDatabase,int,int)方法相似,但是它在当前版本比需要的数据库版本高的时候调用。然而,这个方法不是抽象方法,所以它不是用户必须要实现的。如果不覆盖此方法,默认的实现将拒绝降低版本并且抛出SQLiteException异常。
这个方法在一个事务中执行,一旦抛出异常,所有的改变将会自动回滚。
void onOpen(SQLiteDatabase db):在数据库被打开的时候调用。这个实现会在更新数据库之前检查isReadOnly()。
这个方法在数据库连接形成之后并且数据库模式被建立之后调用。必要时升级或者是降低数据库版本。如果数据库必须在模式建立,升级或者是降级之后以某种方式连接,在onConfigure(SQLiteDatabase)实现而不是onOpen(SQLiteDatabase db)。
abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion):当数据库需要升级的时候调用。该实现需要使用这个方法来删除表,增加表,或者做任何升级到新的模式版本所需要的操作。
SQLite ALTER TABLE文档在这里,可以利用ALTER TABLE来插入一些新的列到一个已经存在的表中,也可以通过ALTER TABLE来重命名或者是移动列。可以利用ALTER TABLE来重命名旧的表,然后建立一个新的表并且将旧表中的内容移入新表。
该方法在事务中执行,一旦异常抛出,所有的改变将自动回滚。
void setWriteAheadLoggingEnabled(boolean enabled):控制预写式日志能否在数据库中使用。预写式日志不可以在只读数据库中使用,所以当数据库为只读的时候该标记的值被忽略。
enable:如果预写式日志可以在数据库中使用则为true,反之false。