?
This document uses PHP Chinese website manual Release
SQLiteOpenHelper
版本:Android 4.0 r1
結(jié)構(gòu)
繼承關(guān)系
public abstract class SQLiteOpenHelper extends Object
java.lang.Object
android.database.sqlite.SQLiteOpenHelper
類(lèi)概述
一個(gè)幫助類(lèi),幫助創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)版本管理。
使用必須創(chuàng)建一個(gè)子類(lèi)來(lái)實(shí)現(xiàn)其onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int)方法,同時(shí)任意實(shí)現(xiàn)onOpen(SQLiteDatabase)方法,同時(shí)打開(kāi)數(shù)據(jù)庫(kù)操作必須保證數(shù)據(jù)庫(kù)存在,如果不存在則創(chuàng)建它,并且對(duì)其必要的升級(jí),維護(hù)其保持一個(gè)最佳的狀態(tài)。
使用本類(lèi)提供內(nèi)容開(kāi)始創(chuàng)建數(shù)據(jù)庫(kù)是非常容易的,首先必須對(duì)數(shù)據(jù)庫(kù)進(jìn)行升級(jí),以避免在數(shù)據(jù)庫(kù)啟動(dòng)后長(zhǎng)期使用而阻塞數(shù)據(jù)。
舉個(gè)例子,在NotePad的例子程序中參看類(lèi)NotePadProvider,在SDK的目錄samples/下面。
注意:這個(gè)類(lèi)假定升級(jí)的版本號(hào)是單調(diào)遞增的。
構(gòu)造函數(shù)
public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
創(chuàng)建一個(gè)幫助對(duì)象,打開(kāi)或者管理數(shù)據(jù)庫(kù)。該方法通??焖俜祷亍?shù)據(jù)庫(kù)并沒(méi)有實(shí)際創(chuàng)建或打開(kāi),直到getWritableDatabase() 或getReadableDatabase()其中一個(gè)被調(diào)用。
參數(shù)
context 用來(lái)打開(kāi)或創(chuàng)建數(shù)據(jù)庫(kù)
name 數(shù)據(jù)庫(kù)文件名,對(duì)一個(gè)在內(nèi)存中的數(shù)據(jù)庫(kù)而言是null
factory 用來(lái)創(chuàng)建對(duì)象游標(biāo),或者默認(rèn)為null
version 數(shù)據(jù)庫(kù)的序號(hào)(從1開(kāi)始);如果數(shù)據(jù)庫(kù)是舊的,onUpgrade(SQLiteDataBase,int,int)會(huì)被調(diào)用去升級(jí)數(shù)據(jù)庫(kù);如果數(shù)據(jù)庫(kù)是新的,onDowngrade(SQLiteDatabase,int,int)會(huì)被調(diào)用去降級(jí)數(shù)據(jù)庫(kù)。
public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler)
創(chuàng)建一個(gè)幫助對(duì)象,打開(kāi)或者管理數(shù)據(jù)庫(kù)。該方法通??焖俜祷亍?shù)據(jù)庫(kù)并沒(méi)有實(shí)際創(chuàng)建或打開(kāi),直到getWritableDatabase() 或getReadableDatabase()其中一個(gè)被調(diào)用。
參數(shù)
context 用來(lái)打開(kāi)或創(chuàng)建數(shù)據(jù)庫(kù)
name 數(shù)據(jù)庫(kù)文件名,對(duì)一個(gè)在內(nèi)存中的數(shù)據(jù)庫(kù)而言是null
factory 用來(lái)創(chuàng)建對(duì)象游標(biāo),或者默認(rèn)為null
version 數(shù)據(jù)庫(kù)的序號(hào)(從1開(kāi)始);如果數(shù)據(jù)庫(kù)是舊的,onUpgrade(SQLiteDataBase,int,int)會(huì)被調(diào)用去升級(jí)數(shù)據(jù)庫(kù);如果數(shù)據(jù)庫(kù)是新的,onDowngrade(SQLiteDatabase,int,int)會(huì)被調(diào)用去降級(jí)數(shù)據(jù)庫(kù)。
errorHandler 當(dāng)sqlite報(bào)告一個(gè)數(shù)據(jù)庫(kù)毀壞錯(cuò)誤時(shí),DatabaseErrorHandler會(huì)被使用。
公共方法
public synchronized void close ()
關(guān)閉任何打開(kāi)的數(shù)據(jù)庫(kù)對(duì)象。
public String getDatabaseName ()
返回正被打開(kāi)的通過(guò)構(gòu)造函數(shù)傳遞進(jìn)來(lái)的SQLite數(shù)據(jù)庫(kù)的名字。
public synchronized SQLiteDatabase getReadableDatabase ()
創(chuàng)建或打開(kāi)一個(gè)數(shù)據(jù)庫(kù)。這和getWritableDatabase()返回的對(duì)象是同一個(gè),除非一些因素要求數(shù)據(jù)庫(kù)只能以read-only的方式被打開(kāi),比如磁盤(pán)滿(mǎn)了。在這種情況下,一個(gè)只讀的數(shù)據(jù)庫(kù)對(duì)象將被返回。如果這個(gè)問(wèn)題被修改掉,將來(lái)調(diào)用getWritableDatabase()就可能成功,而這時(shí)read-only數(shù)據(jù)庫(kù)對(duì)象將被關(guān)閉,并且讀寫(xiě)對(duì)象將被返回。
像getWritableDatabase(),這個(gè)方法需要很長(zhǎng)時(shí)間才返回,所以你不該在應(yīng)用程序的主線程中調(diào)用它,包括方法ContentProvider.onCreate()。
返回值
一個(gè)有效的數(shù)據(jù)庫(kù)對(duì)象,直到getWritableDatabase() or close() 被調(diào)用
異常
SQLiteException 如果數(shù)據(jù)庫(kù)不能被打開(kāi)
public synchronized SQLiteDatabase getWritableDatabase ()
創(chuàng)建或打開(kāi)一個(gè)數(shù)據(jù)庫(kù),用于讀寫(xiě)。該方法第一次被調(diào)用的時(shí)候,數(shù)據(jù)庫(kù)被打開(kāi),并且onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int) 或onOpen(SQLiteDatabase)將被調(diào)用。
一旦成功打開(kāi),數(shù)據(jù)庫(kù)將被緩存,所以需要寫(xiě)入數(shù)據(jù)的時(shí)候你可以調(diào)用這個(gè)方法。(當(dāng)你不再需要這個(gè)數(shù)據(jù)庫(kù)的時(shí)候,確保調(diào)用close())。像不健康的許可或磁盤(pán)已滿(mǎn)等錯(cuò)誤都可能導(dǎo)致該方法是不,但是如果該問(wèn)題被解決,將來(lái)的嘗試可能會(huì)成功。
數(shù)據(jù)庫(kù)升級(jí)可能會(huì)話費(fèi)很長(zhǎng)的時(shí)間,所以你不該在應(yīng)用程序的主線程中調(diào)用它,包括方法ContentProvider.onCreate()。
返回值
一個(gè)有效的讀寫(xiě)數(shù)據(jù)庫(kù)對(duì)象直到close()被調(diào)用。
異常
SQLiteException 如果數(shù)據(jù)庫(kù)不能被打開(kāi)用于寫(xiě)入
public abstract void onCreate (SQLiteDatabase db)
當(dāng)?shù)谝淮蝿?chuàng)建數(shù)據(jù)庫(kù)時(shí)調(diào)用。表格的創(chuàng)建和初始化表格的個(gè)數(shù)在這里完成。
參數(shù)
db 數(shù)據(jù)庫(kù)
public void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion)
當(dāng)數(shù)據(jù)庫(kù)需要降低版本時(shí)候調(diào)用。這個(gè)方法跟onUpgrade()很相似,但是只要當(dāng)然版本比被請(qǐng)求的更新,它就會(huì)被調(diào)用。盡管如此,這個(gè)方法不是抽象的,所以它并不強(qiáng)制用戶(hù)去實(shí)現(xiàn)它。如果不被重寫(xiě),默認(rèn)的實(shí)現(xiàn)將會(huì)拒絕降級(jí)并且拋出一個(gè)SQLiteException。
參數(shù)
db 數(shù)據(jù)庫(kù)
oldVersionThe 舊版本數(shù)據(jù)庫(kù)
newVersionThe 新版本數(shù)據(jù)庫(kù)
public void onOpen (SQLiteDatabase db)
當(dāng)數(shù)據(jù)庫(kù)打開(kāi)時(shí)調(diào)用。這個(gè)實(shí)現(xiàn)會(huì)在升級(jí)數(shù)據(jù)庫(kù)之前會(huì)檢查isReadOnly()。
參數(shù)
db 數(shù)據(jù)庫(kù)
public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)
當(dāng)數(shù)據(jù)庫(kù)升級(jí)時(shí)調(diào)用。這個(gè)實(shí)現(xiàn)需要使用該方法去丟棄表格,增加表格,或者做一些其它事情,它需要升級(jí)到新的計(jì)劃中的版本。
SQLite ALTER TABLE文檔可以在這找到。如果你添加新的列,你可以使用ALTER TABLE 去把它們插入到活著的表格中。如果你重命名或移動(dòng)列,你可以使用ALTER TABLE去重命名這些舊的表格,然后創(chuàng)建新的表格,之后把舊表格的數(shù)據(jù)放到新的表格上。
參數(shù)
db 數(shù)據(jù)庫(kù)
oldVersionThe 舊版本數(shù)據(jù)庫(kù)
newVersionThe 新版本數(shù)據(jù)庫(kù)
補(bǔ)充
文章精選
android SQLiteOpenHelper使用示例