SQLite簡介
SQLite是一個小型數(shù)據(jù)庫,它被集成到Android系統(tǒng)中完成數(shù)據(jù)庫部分。它不需要進行配置和管理,可以在Android系統(tǒng)中直接使用。
SQLite使用
1.SQLiteOpenHelper
SQLiteOpenHelper使用一個幫助類,通過繼承它并實現(xiàn)onCreate方法和Upgrade方法,來管理我們的數(shù)據(jù)庫。
- onCreate方法是framework層調用,當你要打開某個數(shù)據(jù)庫,但是這個數(shù)據(jù)庫不存在時,framework就會調用這個方法去創(chuàng)建一個數(shù)據(jù)庫。
- onUpgrade方法是在對數(shù)據(jù)庫進行更新時調用的,當你的數(shù)據(jù)庫版本增加時,你可以通過調用這個方法修改數(shù)據(jù)庫或者刪除數(shù)據(jù)庫然后通過調用onCreate方法重現(xiàn)創(chuàng)建數(shù)據(jù)庫。
另外SQLiteOpenHelper還提供了getReadableDatabase方法和getWriteableDatabase方法去獲取一個SQLDatabase對象。
上述兩方法中都會使用SQLiteDatabase對象作為參數(shù),這個類就代表了數(shù)據(jù)庫。
注意:對于數(shù)據(jù)庫創(chuàng)建的最佳實踐是,每個表都建一個類,并且在這個類中定義static的onCreate和onUpgrade方法,這些方法在SQLiteOpenHelper中被調用,這樣你的SQLiteOpenHelper實現(xiàn)類就有很好的可讀性了,即使你有很多的數(shù)據(jù)表。
2.SQLiteDatabase
SQLiteDatabase類是整個android數(shù)據(jù)庫的基礎類,它提供了對數(shù)據(jù)庫操作的增刪改查方法,另外還可以通過execSQL方法來執(zhí)行SQL語句。
ContentValues是對key/value的一個包裝,使用它可以將要插入或者要修改的數(shù)據(jù)以key/value的形式進行封裝,在使用相應增改方法的時候直接使用。
- rawQuery 是SQLDatabase的方法,他可以使用SQL語句直接查詢。
- query是推薦的查詢方法,它的使用類似于Hibernate中的查詢,只需要將參數(shù)查詢條件等一參數(shù)的形式提供,就可以得到結果
- Cursor對象,這個是查詢的結果使用它可以遍歷整個查詢出的數(shù)據(jù)內容(table)
- SQLiteBuilder是用來創(chuàng)建查詢語句的
3.Cursor
這個類是查詢結果的封裝,使用他可以很方便的獲取數(shù)據(jù)庫查詢結果。
- getCount()返回結果數(shù)據(jù)的條數(shù)
- moveFirst 將游標指向第一條查詢結果
- moveNext 將游標指向下一條查詢結果
- isAfterLast 檢查是否已經(jīng)到達end
注意:Cursor在使用完成后需要調用close關閉。(TDOO:如果不關閉怎么辦)
4.DAO在Android中的使用
DAO的作用就是對外提供增刪改查接口,在他的內部封裝了SQLiteDatabase,以及SQLiteOpenHelper,將常用的增刪改查以靜態(tài)方法的形式對外提供。并且還封裝了一些對數(shù)據(jù)進行初步加工的方法。DAO的存在就是將應用層和數(shù)據(jù)持久層相互隔離,應用層需要操作數(shù)據(jù)時,只通過DAO來和持久層交互。在持久層的實現(xiàn)中可以引入CursorLoader之類的東西。在Android中的最佳實踐是使用ContentProvider來訪做DAO與數(shù)據(jù)層進行交互,因為Android為此提供了安全而完善的機制訪問數(shù)據(jù)層。
SQLite使用注意事項
- 在對數(shù)據(jù)庫進行操作的時候會訪問文件系統(tǒng),很有可能是耗時操作,因此建議放在異步線程進行數(shù)據(jù)庫操作。
- 應用創(chuàng)建的數(shù)據(jù)庫的位置為DATA/data/包名/databases/數(shù)據(jù)庫名,其中DATA是Environment.getDataDirectory() 方法返回的路徑。