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,CursorFactory factory,int version);
其中name參數表示數據庫文件名(不包括文件路徑),SQLiteOpenHelper會根據這個文件名建立數據庫文件。version表示數據庫的版本號。若是當前傳入的數據庫版本號比上次建立或升級的版本號高,SQLiteOpenHelper就會調用onUpdate()方法。也就是說,當數據庫第一次建立時會有一個初始的版本號。當須要對數據庫中的表、視圖等組建升級時能夠增大版本號,再從新建立它們。如今總結一下oncreate()和onUpdate()調用過程。
1.若是數據庫文件不存在,SQLiteOpenHelper在自動建立數據庫後會調用oncreate()方法,在該方法中通常須要建立表、視圖等組件。在建立前數據庫通常是空的,所以不須要先刪除數據庫中相關的組件。
2.若是數據庫文件存在,而且當前版本號高於上次建立或升級的版本號,SQLiteOpenHelper會調用onUpdate()方法,調用該方法後會更新數據庫的版本號。在onupdate()方法中除了建立表、視圖等組件外,還須要先刪除這些相關的組件,所以,在調用onupdate()方法前,數據庫是存在的,裏面還原許多數據庫組建。
綜合上述兩點,能夠得出一個結論。若是數據庫文件不存在,只有oncreate()被調用(該方法在建立數據庫時被調用一次)。若是數據庫文件存在,會調用onupdate()方法升級數據庫,並更新版本號html