前言
本章內容android.database.sqlite.SQLiteOpenHelper章節,版本為Android 4.0 r1,翻譯來自:"StreamH",歡迎訪問他的部落格:"http://blog.csdn.net/qs_csu",再次感謝"StreamH" !期待你一起參與翻譯Android的相關資料,聯絡我over140@gmail.com。
聲明
歡迎轉載,但請保留文章原始出處:)
部落格園:http://www.cnblogs.com/
Android中文翻譯組:http://androidbox.sinaapp.com/
SQLiteOpenHelper
譯者署名:StreamH
譯者連結:http://blog.csdn.net/qs_csu
版本:Android 4.0 r1
結構
繼承關係
public abstract class SQLiteOpenHelper extends Object
java.lang.Object
android.database.sqlite.SQLiteOpenHelper
類概述
一個協助類,協助建立資料庫和資料庫版本管理。
使用必須建立一個子類來實現其onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int)方法,同時任意實現onOpen(SQLiteDatabase)方法,同時開啟資料庫操作必須保證資料庫存在,如果不存在則建立它,並且對其必要的升級,維護其保持一個最佳的狀態。
使用本類提供內容開始建立資料庫是非常容易的,首先必須對資料庫進行升級,以避免在資料庫啟動後長期使用而阻塞資料。
舉個例子,在NotePad的例子程式中參看類NotePadProvider,在SDK的目錄samples/下面。
注意:這個類假定升級的版本號碼是單調遞增的。
建構函式
public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
建立一個協助對象,開啟或者管理資料庫。該方法通常快速返回。資料庫並沒有實際建立或開啟,直到getWritableDatabase() 或getReadableDatabase()其中一個被調用。
參數
context 用來開啟或建立資料庫
name 資料庫檔案名,對一個在記憶體中的資料庫而言是null
factory 用來建立對象遊標,或者預設為null
version 資料庫的序號(從1開始);如果資料庫是舊的,onUpgrade(SQLiteDataBase,int,int)會被調用去升級資料庫;如果資料庫是新的,onDowngrade(SQLiteDatabase,int,int)會被調用去降級資料庫。
public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler)
建立一個協助對象,開啟或者管理資料庫。該方法通常快速返回。資料庫並沒有實際建立或開啟,直到getWritableDatabase() 或getReadableDatabase()其中一個被調用。
參數
context 用來開啟或建立資料庫
name 資料庫檔案名,對一個在記憶體中的資料庫而言是null
factory 用來建立對象遊標,或者預設為null
version 資料庫的序號(從1開始);如果資料庫是舊的,onUpgrade(SQLiteDataBase,int,int)會被調用去升級資料庫;如果資料庫是新的,onDowngrade(SQLiteDatabase,int,int)會被調用去降級資料庫。
errorHandler 當sqlite報告一個資料庫毀壞錯誤時,DatabaseErrorHandler會被使用。
公用方法
public synchronized void close ()
關閉任何開啟的資料庫物件。
public String getDatabaseName ()
返回正被開啟的通過建構函式傳遞進來的SQLite資料庫的名字。
public synchronized SQLiteDatabase getReadableDatabase ()
建立或開啟一個資料庫。這和getWritableDatabase()返回的對象是同一個,除非一些因素要求資料庫只能以read-only的方式被開啟,比如磁碟滿了。在這種情況下,一個唯讀資料庫物件將被返回。如果這個問題被修改掉,將來調用getWritableDatabase()就可能成功,而這時read-only資料庫物件將被關閉,並且讀寫對象將被返回。
像getWritableDatabase(),這個方法需要很長時間才返回,所以你不該在應用程式的主線程中調用它,包括方法ContentProvider.onCreate()。
傳回值
一個有效資料庫物件,直到getWritableDatabase() or close() 被調用
異常
SQLiteException 如果資料庫不能被開啟
public synchronized SQLiteDatabase getWritableDatabase ()
建立或開啟一個資料庫,用於讀寫。該方法第一次被調用的時候,資料庫被開啟,並且onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int) 或onOpen(SQLiteDatabase)將被調用。
一旦成功開啟,資料庫將被緩衝,所以需要寫入資料的時候你可以調用這個方法。(當你不再需要這個資料庫的時候,確保調用close())。像不健康的許可或磁碟已滿等錯誤都可能導致該方法是不,但是如果該問題被解決,將來的嘗試可能會成功。
資料庫升級可能會話費很長的時間,所以你不該在應用程式的主線程中調用它,包括方法ContentProvider.onCreate()。
傳回值
一個有效讀寫資料庫物件直到close()被調用。
異常
SQLiteException 如果資料庫不能被開啟用於寫入
public abstract void onCreate (SQLiteDatabase db)
當第一次建立資料庫時調用。表格的建立和初始化表格的個數在這裡完成。
參數
db 資料庫
public void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion)
當資料庫需要降低版本時候調用。這個方法跟onUpgrade()很相似,但是只要當然版本比被請求的更新,它就會被調用。儘管如此,這個方法不是抽象的,所以它並不強制使用者去實現它。如果不被重寫,預設的實現將會拒絕降級並且拋出一個SQLiteException。
參數
db 資料庫
oldVersionThe 舊版本資料庫
newVersionThe 新版本資料庫
public void onOpen (SQLiteDatabase db)
當資料庫開啟時調用。這個實現會在升級資料庫之前會檢查isReadOnly()。
參數
db 資料庫
public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)
當資料庫升級時調用。這個實現需要使用該方法去丟棄表格,增加表格,或者做一些其它事情,它需要升級到新的計劃中的版本。
SQLite ALTER TABLE文檔可以在這找到。如果你添加新的列,你可以使用ALTER TABLE 去把它們插入到活著的表格中。如果你重新命名或移動列,你可以使用ALTER TABLE去重新命名這些舊的表格,然後建立新的表格,之後把舊錶格的資料放到新的表格上。
參數
db 資料庫
oldVersionThe 舊版本資料庫
newVersionThe 新版本資料庫
補充
文章精選
android SQLiteOpenHelper使用樣本