SQLiteOpenHelper類與自動公升級資料庫

2021-05-26 09:51:13 字數 1361 閱讀 3139

sqlitedatabase是android sdk中運算元據庫的核心類之一。使用sqlitedatabase可以開啟資料庫,也可以對資料庫進行操作。然而為了資料庫公升級的需要以及使用更方便,往往使用sqliteopenhelper的子類來完成建立、開啟資料庫及各種資料庫操作。

sqliteopenhelper是個抽象類,在該類中有如下兩個抽象方法,sqliteopenhelper的子類必須實現這兩個方法。

public abstract void oncreate(sqlitedatabase db);

public abstract void onupdate(sqlitedatabase db,int oldversion,int newversion);

sqliteopenhelper會自動檢測資料庫檔案是否存在。如果存在,會開啟這個資料庫,在這種情況下就不會呼叫oncreate()方法。如果資料庫檔案不存在,sqliteopenhelper首先會建立乙個資料庫檔案,然後開啟這個資料庫,最後呼叫oncreate()方法。因此,oncreate()方法一般用來在新建立的資料庫中建立表、檢視等資料庫組建。也就是說oncreate()方法在資料庫檔案第一次建立時呼叫。

先看看sqliteopenhelper類的構造方法再解釋onupdate()方法何時會被呼叫。

public sqliteopenhelper(context context,string name,curso***ctory factory,int version);

其中name引數表示資料庫檔名(不包括檔案路徑),sqliteopenhelper會根據這個檔名建立資料庫檔案。version表示資料庫的版本號。如果當前傳入的資料庫版本號比上次建立或公升級的版本號高,sqliteopenhelper就會呼叫onupdate()方法。也就是說,當資料庫第一次建立時會有乙個初始的版本號。當需要對資料庫中的表、檢視等組建公升級時可以增大版本號,再重新建立它們。現在總結一下oncreate()和onupdate()呼叫過程。

1.如果資料庫檔案不存在,sqliteopenhelper在自動建立資料庫後會呼叫oncreate()方法,在該方法中一般需要建立表、檢視等元件。在建立前資料庫一般是空的,因此不需要先刪除資料庫中相關的元件。

2.如果資料庫檔案存在,並且當前版本號高於上次建立或公升級的版本號,sqliteopenhelper會呼叫onupdate()方法,呼叫該方法後會更新資料庫的版本號。在onupdate()方法中除了建立表、檢視等元件外,還需要先刪除這些相關的元件,因此,在呼叫onupdate()方法前,資料庫是存在的,裡面還原許多資料庫組建。

綜合上述兩點,可以得出乙個結論。

如果資料庫檔案不存在,只有oncreate()被呼叫(該方法在建立資料庫時被呼叫一次)。如果資料庫檔案存在,會呼叫onupdate()方法公升級資料庫,並更新版本號。

公升級資料庫

第一版只有book表 第二版加上category表 第三版為book表加上category id 列 book表 這是公升級後的原來沒有category id 列 public static final string create book create table book id integer ...

SQLite資料公升級資料遷移

做android應用,不可避免的會與sqlite打交道。隨著應用的不斷公升級,原有的資料庫結構可能已經不再適應新的功能,這時候,就需要對sqlite資料庫的結構進行公升級了。sqlite提供了alter table命令,允許使用者重新命名或新增新的字段到已有表中,但是不能從表中刪除字段。並且只能在表...

FreeSql生產環境自動公升級資料庫解決方案

使用freesql,包含所有的orm資料庫,都會存在這樣的問題。在codefirst模式下,根據 自動更新資料庫,都建議不要在生產環境使用。為什麼呢?其實不建議使用,主要是根據 自動生成資料時,極有可能會造成資料的丟失,比如修改字段型別,自動更新的結果可能並不是自己想的。但是有一些使用場景是需要在生...