SQLiteOpenHelper

一、SQLite簡單介紹html

SQ爲Structured Query (結構化查詢)的縮寫,Lite表示輕量級。SQLite是一款開源的關係型數據庫。幾乎能夠支持全部現代編程語言和各類操做系統,SQLite的最新版本爲SQLite 3。
java


SQLite的特性: 
1. ACID事務 
2. 零配置 – 無需安裝和管理配置 
3. 儲存在單一磁盤文件中的一個完整的數據庫 
4. 數據庫文件能夠在不一樣字節順序的機器間自由的共享 
5. 支持數據庫大小至2TB 
6. 足夠小, 大體3萬行C代碼, 250K , 運行時佔用內存大概幾百K。
7. 比一些流行的數據庫在大部分普通數據庫操做要快 
8. 簡單, 輕鬆的API 
9. 包含TCL綁定, 同時經過Wrapper支持其餘語言的綁定 
10. 良好註釋的源代碼, 而且有着90%以上的測試覆蓋率 
11. 獨立: 沒有額外依賴 
12. Source徹底的Open, 你能夠用於任何用途, 包括出售它 
13. 支持多種開發語言,C, PHP, Perl, Java, ASP.NET,Python 
mysql



二、SQLite數據庫相關操做方法android

對SQLite數據庫的操做通常包括:建立一個數據庫,打開數據庫,關閉數據庫,刪除數據庫。sql


2.一、建立和打開數據庫的方法:數據庫

使用openOrCreateDatabase()方法來建立,若數據庫不存在,則會建立新數據庫,若存在,則打開數據庫。和openFileOutput(String filename,mode)的使用差很少編程

openOrCreateDatabase()方法的返回值爲一個SQLiteDatabase對象。api


2.二、關閉SQLite數據庫app

對數據庫操做完畢以後,就要關閉數據庫,不然會拋出SQLiteException異常。關閉數據庫只需調用成SQLiteDatabase對象的.close()方法便可。編程語言


2.三、刪除數據庫

直接調用deleteDatebase()方法便可,如:

[java] view plaincopy

  1. this.deleteDatabase("mysqlite.db")  




三、SQLiteOpenHelper介紹

通常在實際開發中,爲了更加方便地管理、維護、升級數據庫,須要經過繼承SQLiteOpenHelper類來管理SQLite數據庫。

SQLiteOpenHelper能夠建立數據庫,和管理數據庫的版本。

在繼承SQLiteOpenHelper的類(extends SQLiteOpenHelper)裏面,經過複寫onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase, int, int) 和onOpen(SQLiteDatabase)(可選)來操做數據庫。



二、SQLiteOpenHelper()的具體用法

建立一個新的class以下所示,onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法會被自動添加。

[java] view plaincopy


  1. package com.conowen.sqlite;  

  2.   

  3. import android.content.Context;  

  4. import android.database.sqlite.SQLiteDatabase;  

  5. import android.database.sqlite.SQLiteDatabase.CursorFactory;  

  6. import android.database.sqlite.SQLiteOpenHelper;  

  7.   

  8. public class DbHelper extends SQLiteOpenHelper{  

  9.   

  10.     public DbHelper(Context context, String name, CursorFactory factory,  

  11.             int version) {  

  12.         super(context, name, factory, version);  

  13.         // TODO Auto-generated constructor stub  

  14.     }  

  15.   

  16.     @Override  

  17.     public void onCreate(SQLiteDatabase db) {  

  18.         // TODO Auto-generated method stub  

  19.           

  20.     }  

  21.   

  22.     @Override  

  23.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  

  24.         // TODO Auto-generated method stub  

  25.           

  26.     }  

  27.   

  28. }  

方法詳解

[java] view plaincopy

  1. public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version)   

Since: API Level 1

Create a helper object to create, open, and/or manage a database. This method always returns very quickly. The database is not actually created or opened until one ofgetWritableDatabase() orgetReadableDatabase() is called.

Parameters
context to use to open or create the database
name of the database file, or null for an in-memory database
factory to use for creating cursor objects, or null for the default
version number of the database (starting at 1); if the database is older, onUpgrade(SQLiteDatabase, int, int) will be used to upgrade the database; if the database is newer, onDowngrade(SQLiteDatabase, int, int) will be used to downgrade the database

參數簡述:

name————表示數據庫文件名(不包括文件路徑),SQLiteOpenHelper類會根據這個文件名來建立數據庫文件。

version————表示數據庫的版本號。若是當前傳入的數據庫版本號比上一次建立的版本高,SQLiteOpenHelper就會調用onUpgrade()方法。


[java] view plaincopy

  1. public DbHelper(Context context, String name, CursorFactory factory,  

  2.             int version) {  

  3.         super(context, name, factory, version);  

  4.         // TODO Auto-generated constructor stub  

  5.     }  


以上是SQLiteOpenHelper 的構造函數,當數據庫不存在時,就會建立數據庫,而後打開數據庫(過程已經被封裝起來了),再調用onCreate (SQLiteDatabase db)方法來執行建立表之類的操做。當數據庫存在時,SQLiteOpenHelper 就不會調用onCreate (SQLiteDatabase db)方法了,它會檢測版本號,若傳入的版本號高於當前的,就會執行onUpgrade()方法來更新數據庫和版本號。


三、SQLiteOpenHelper的兩個主要方法

3.一、onCreate方法

[java] view plaincopy

  1. public abstract void onCreate (SQLiteDatabase db)<span class="normal"></span>  

Since: API Level 1

Called when the database is created for the first time. This is where the creation of tables and the initial population of the tables should happen.

Parameters
db The database.

[java] view plaincopy

  1. //這樣就建立一個一個table  

  2.     @Override  

  3.     public void onCreate(SQLiteDatabase db) {  

  4.         // TODO Auto-generated method stub  

  5.   

  6.          String sql = "CREATE  TABLE table_name(_id INTEGER PRIMARY KEY , filename VARCHAR, data TEXT)";  

  7.         db.execSQL(sql);  

  8.           

  9.     }  




3.二、onUpgrade方法

[java] view plaincopy

  1. public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)  


Since: API Level 1

Called when the database needs to be upgraded. The implementation should use this method to drop tables, add tables, or do anything else it needs to upgrade to the new schema version.

The SQLite ALTER TABLE documentation can be found here. If you add new columns you can use ALTER TABLE to insert them into a live table. If you rename or remove columns you can use ALTER TABLE to rename the old table, then create the new table and then populate the new table with the contents of the old table.

Parameters
db The database.
oldVersion The old database version.
newVersion The new database version.

        更新數據庫,包括刪除表,添加表等各類操做。若版本是初版,也就是剛剛創建數據庫,onUpgrade()方法裏面就不用寫東西,由於初版數據庫何來更新之說,之後發佈的版本,數據庫更新的話,能夠在onUpgrade()方法添加各類更新的操做。



四、注意事項

建立完SQLiteOpenHelper 類以後,在主activity裏面就能夠經過SQLiteOpenHelper.getWritableDatabase()或者getReadableDatabase()方法來獲取在SQLiteOpenHelper 類裏面建立的數據庫實例。(也就是說只有調用這兩種方法才真正地實例化數據庫)


getWritableDatabase() 方法————以讀寫方式打開數據庫,若是數據庫所在磁盤空間滿了,而使用的又是getWritableDatabase() 方法就會出錯。

                                                                         由於此時數據庫就只能讀而不能寫,


getReadableDatabase()方法————則是先以讀寫方式打開數據庫,若是數據庫的磁盤空間滿了,就會打開失敗,可是當打開失敗後會繼續嘗試以只讀

                                                                          方式打開數據庫。而不會報錯

相關文章
相關標籤/搜索