每一個應用程序都要使用數據,Android應用程序也不例外,Android使用開源的、與操做系統無關的SQL數據庫 --大名鼎鼎的SQLite。SQLite是一款輕量級數據庫,它的設計目的是嵌入式,並且它佔用的資源很是少,在嵌入式設備中,可能只須要幾百KB,這也是 Android 系統採用 SQLite 數據庫的緣由之一吧。html
簡介sql
- 輕量級
使用 SQLite 只須要帶一個動態庫,就能夠享受它的所有功能,並且那個動態庫的尺寸想當小。
- 獨立性
SQLite 數據庫的核心引擎不須要依賴第三方軟件,也不須要所謂的「安裝」。
- 隔離性
SQLite 數據庫中全部的信息(好比表、視圖、觸發器等)都包含在一個文件夾內,方便管理和維護。
- 跨平臺
SQLite 目前支持大部分操做系統,不至電腦操做系統更在衆多的手機系統也是可以運行,好比:Android。
- 多語言接口
SQLite 數據庫支持多語言編程接口。
- 安全性
- 該工具擁有大量的可視化功能,例如,創建數據庫、創建表、SQL Builder等工具。圖6.16是SQLite ExpertProfessional的主界面。
建立數據庫和表 使用SQLite控制檯工具(sqlite3.exe)創建數據庫很是簡單,只須要輸入以下的命令就能夠創建或打開數據庫。 sqlite3.exe test.db 若是數據庫(test.db)存在,則打開該數據庫,若是數據庫不存在,則預創建test.db文件(這時並不生成test.db文件,直到在Sqlite控制檯中執行與數據庫組件(表、視圖、觸發器等)相關的命令或SQL語句才建立test.db文件。 若是想使用sqlite.exe命令同時創建數據庫和表,能夠先創建一個sql.script文件(也能夠是其餘文件名),並在其中輸入以下的SQL語句: create table table1 ( id integerprimary key, age int, name text ); create table table2( idinteger primary key, type_idinteger, name text ); 而後執行以下的命令,就會在創建test.db文件的同時,在該test.db文件中創建table1和table2兩個表。 sqlite3.exe test.db < sql.script 在使用createtable語句建立表時還能夠爲每個字段指定默認值,以下面的SQL語句所示: create table table1 ( id integerprimary key, age int default 20, name text ); create table table2( id integerprimary key, type_idinteger, name text default 'name1' ); 模糊查詢 Sqlite的模糊查詢與其餘數據庫相似,都使用了like關鍵字和%通配符。不過Sqlite在處理中文時會遇到一些麻煩。例如,使用下面的SQL語句向table2插入了一條記錄。 insert into table2(id, type_id, name) values(1, 20,'手機操做系統'); 在Sqlite控制檯中使用以下的SQL查詢是沒有問題的。 select * from table2 where name = '手機操做系統'; 但若是使用下面的模糊查詢語句,則沒法查詢到記錄。 select * from table2 where name like '手機%'; 發生這種事情的緣由是由於Sqlite控制檯在保存中文時使用的編碼格式是GB2312,而執行like操做時使用的是UTF-8。讀者可使用以下的命令來查看Sqlite控制檯當前的編碼格式。 PRAGMA encoding; 爲了可使用like模糊查詢中文,做者建議使用6.4.1節介紹的SQLite Expert Professional來執行insert、update等SQL語句來編輯數據。在這個工具中會直接使用UTF-8來保存中文。 分頁顯示記錄 分頁是在Web應用中常常被提到的概念。基本原理是從數據庫中得到查詢結果的部分數據,而後顯示在頁面中。雖然本書並無介紹Web程序的開發,但得到查詢結果的部分數據仍然很是重要。 Sqlite和MySQL相同,都使用了limit關鍵字來限制select語句返回的記錄數。limit須要兩個參數,第1個參數表示返回的子記錄集在父記錄集的開始位置(從0開始),第2個參數表示返回子記錄集的記錄數。第2個參數爲可選值,若是不指定這個參數,會得到從起始位置開始日後的全部記錄。例如,下面的select語句返回了table2表中從第11條記錄開始的100條記錄。 select * from table2 limit 10,100 事務 若是一次執行多條修改記錄(insert、update等)的SQL語句,那麼當某一條SQL語句執行失敗時,就須要取消其餘SQL語句對記錄的修改。不然就會形成數據不一致的狀況。而事務是解決這個問題的最佳方法。 在Sqlite中可使用BEGIN來開始一個事件,例如,下面的代碼執行了兩條SQL語句,若是第2條語句執行失敗,那麼第1條SQL語句執行的結果就會回滾,至關於沒執行這條SQL語句。 BEGIN; insert into table1(id, name) values(50,'Android'); insert into table2(id, name) values(1, '測試'); 若是想顯式地回滾記錄的修改結果,可使用ROLLBACK語句,代碼以下: BEGIN; delete from table2; ROLLBACK; 若是想顯式地提交記錄的修改結果,可使用COMMIT語句,代碼以下: BEGIN; delete from table2; COMMIT;