本文為原創,如需轉載,請注明作者和出處,謝謝!
現在終于到講解資料庫的時間了。資料庫也是Android存儲方案的核心。在Android系統中使用了Sqlite資料庫。Sqlite是非常輕量的資料庫。從Sqlite的标志是一根羽毛就可以看出Sqlite的目标就是無論是過去、現在,還是将來,Sqlite都将以輕量級資料庫的姿态出現。Sqlite雖然輕量,但在執行某些簡單的SQL語句時甚至比MySQL和Postgresql還快。由于很多讀者是第一次接觸Sqlite資料庫,是以,在介紹如何在Android中使用Sqlite之前,先在本節簡單介紹一下如何在PC上建立Sqlite資料庫,以及Sqlite資料庫的一些特殊方面(由于本書的目的不是介紹Sqlite資料庫,是以,與其他資料庫類似的部分(如insert、update等)本書将不再介紹。沒有掌握這些知識的讀者可以參閱其他關于資料庫方面的書籍。
6.4.1 Sqlite資料庫管理工具
在學習一種新技術之前,首先要做的是在自己的計算機上安裝可以操作這種技術的工具。當然,這也非常符合一句成語:功欲善其事,必先利其器。雖然使用好的工具并不能使自己更好地掌握這種技術,但卻能使我們的工作效率大大提升。
言歸正傳,現在先看看官方為我們提供了什麼工具來操作Sqlite資料庫。進入官方的下載下傳頁面,網址如下:
http://www.sqlite.org/download.html
在下載下傳頁面中找到Windows版的二進制下載下傳包。在作者寫作本書時,Sqlite的最新版本是Sqlite3.6.2。是以,要下載下傳的檔案是Sqlite-3_6_20.zip。将這個zip檔案解壓,發現在解壓目錄中隻有1個檔案:sqlite3.exe。對,這個檔案就是操作Sqlite資料庫的工具(是不是很輕量?連工具都隻有一個)。它是一個指令行程式,運作這個程式,進入操作界面,如圖6.15所示。

在控制台中可以輸入SQL語句或控制台指令。所有的SQL語句後面必須以分号(;)結尾。控制台指令必須以實心點(.)開頭,例如,.help(顯示幫助資訊);.quit(退出控制台);.tables(顯示目前資料庫中所有表名)。
雖然可以在Sqlite的控制台中輸入SQL語句來操作資料庫,但輸入大量的指令會使工作量大大增加。是以,我們必須要使用所謂的“利器”來取代這個控制台程式。
由于Sqlite提供了各種類型的程式接口,是以,可以管理Sqlite資料庫的工具非常多,下面是幾個比較常用的Sqlite管理工具。
SQLite Database Browser
http://sourceforge.net/projects/sqlitebrowser
SQLite Expert Professional
http://www.sqliteexpert.com
Sqlite Developer
http://www.sqlitedeveloper.com
sqliteSpy
http://www.softpedia.com/progDownload/SQLiteSpy-Download-107386.html
作者在寫作本書時使用了SQLiteExpert Professional,這也是作者推薦使用的Sqlite管理工具。該工具擁有大量的可視化功能,例如,建立資料庫、建立表、SQL Builder等工具。圖6.16是SQLite ExpertProfessional的主界面。
6.4.2 建立資料庫和表
使用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'
);
6.4.3 模糊查詢
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來儲存中文。
6.4.4 分頁顯示記錄
分頁是在Web應用中經常被提到的概念。基本原理是從資料庫中獲得查詢結果的部分資料,然後顯示在頁面中。雖然本書并沒有介紹Web程式的開發,但獲得查詢結果的部分資料仍然非常重要。
Sqlite和MySQL相同,都使用了limit關鍵字來限制select語句傳回的記錄數。limit需要兩個參數,第1個參數表示傳回的子記錄集在父記錄集的開始位置(從0開始),第2個參數表示傳回子記錄集的記錄數。第2個參數為可選值,如果不指定這個參數,會獲得從起始位置開始往後的所有記錄。例如,下面的select語句傳回了table2表中從第11條記錄開始的100條記錄。
select * from table2 limit 10,100
6.4.5 事務
如果一次執行多條修改記錄(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;
本文轉自銀河使者部落格園部落格,原文連結
http://www.cnblogs.com/nokiaguy/archive/2010/10/28/1863934.html如需轉載請自行聯系原作者 銀河使者