西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁西西教程數(shù)據(jù)庫教程 → Android開發(fā)之SQLIte數(shù)據(jù)庫介紹

Android開發(fā)之SQLIte數(shù)據(jù)庫介紹

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時(shí)間:2012/8/29 9:00:31字體大。A-A+

作者:佚名點(diǎn)擊:230次評論:38次標(biāo)簽: SQLIte

  • 類型:編程輔助大。7.0M語言:中文 評分:8.5
  • 標(biāo)簽:
立即下載

Android數(shù)據(jù)庫 

一、關(guān)系型數(shù)據(jù)庫SQLIte

  每個(gè)應(yīng)用程序都要使用數(shù)據(jù),Android應(yīng)用程序也不例外,Android使用開源的、與操作系統(tǒng)無關(guān)的SQL數(shù)據(jù)庫—SQLite。SQLite第一個(gè)Alpha版本誕生于2000年5月,它是一款輕量級數(shù)據(jù)庫,它的設(shè)計(jì)目標(biāo)是嵌入式的,占用資源非常的低,只需要幾百K的內(nèi)存就夠了。SQLite已經(jīng)被多種軟件和產(chǎn)品使用,Mozilla FireFox就是使用SQLite來存儲配置數(shù)據(jù)的,Android和iPhone都是使用SQLite來存儲數(shù)據(jù)的。

SQLite體系結(jié)構(gòu)圖如下:

     

  編譯器包括Tokenizer(詞法分析器)、 Parser(語法分析器)、Code Generator(代碼產(chǎn)生器)。他們協(xié)同處理文本形式的結(jié)構(gòu)化查詢語句。

  后端由B-tree,Pager,OS Interface組成。B-tree的職責(zé)是負(fù)責(zé)排序,維護(hù)多個(gè)數(shù)據(jù)庫頁之間錯(cuò)綜復(fù)雜的關(guān)系,將頁面組織成樹狀結(jié)構(gòu),頁面就是樹的葉子。Pager負(fù)責(zé)傳輸,根據(jù)B-tree的請求從磁盤讀取頁面或者寫入頁面。

  公共服務(wù)中有各種實(shí)用的功能比如:內(nèi)存分配、字符串比較,Unicode轉(zhuǎn)換等。

 SQLite數(shù)據(jù)庫是D.Richard Hipp用C語言編寫的開源嵌入式數(shù)據(jù)庫,支持的數(shù)據(jù)庫大小為2TB。它具有如下特征:

1、輕量級

SQLite和C\S模式的數(shù)據(jù)庫軟件不同,它是進(jìn)程內(nèi)的數(shù)據(jù)庫引擎,因此不存在數(shù)據(jù)庫的客戶端和服務(wù)器。使用SQLite一般只需要帶上它的一個(gè)動態(tài)庫,就可以享受它的全部功能。而且那個(gè)動態(tài)庫的尺寸也相當(dāng)小。

2、獨(dú)立性

SQLite數(shù)據(jù)庫的核心引擎本身不依賴第三方軟件,使用它也不需要“安裝”,所以在使用的時(shí)候能夠省去不少麻煩。

3、隔離性

SQLite數(shù)據(jù)庫中的所有信息(比如表、視圖、觸發(fā)器)都包含在一個(gè)文件內(nèi),方便管理和維護(hù)。

4、跨平臺

SQLite數(shù)據(jù)庫支持大部分操作系統(tǒng),除了我們在電腦上使用的操作系統(tǒng)之外,很多手機(jī)操作系統(tǒng)同樣可以運(yùn)行,比如Android、Windows Mobile、Symbian、Palm等。

5、多語言接口

SQLite數(shù)據(jù)庫支持很多語言編程接口,比如C\C++、Java、Python、dotNet、Ruby、Perl等,得到更多開發(fā)者的喜愛。

6、安全性

SQLite數(shù)據(jù)庫通過數(shù)據(jù)庫級上的獨(dú)占性和共享鎖來實(shí)現(xiàn)獨(dú)立事務(wù)處理。這意味著多個(gè)進(jìn)程可以在同一時(shí)間從同一數(shù)據(jù)庫讀取數(shù)據(jù),但只有一個(gè)可以寫入數(shù)據(jù)。在某個(gè)進(jìn)程或線程向數(shù)據(jù)庫執(zhí)行寫操作之前,必須獲得獨(dú)占鎖定。在發(fā)出獨(dú)占鎖定后,其他的讀或?qū)懖僮鲗⒉粫侔l(fā)生。

二、導(dǎo)出查看數(shù)據(jù)庫文件

  在android中,為某個(gè)應(yīng)用程序創(chuàng)建的數(shù)據(jù)庫,只有它可以訪問,其它應(yīng)用程序是不能訪問的,數(shù)據(jù)庫位于Android設(shè)備/data/data/package_name/databases文件夾中。

  想要將數(shù)據(jù)庫文件導(dǎo)出可以使用eclipse,如圖所示:

 

  查看數(shù)據(jù)庫,使用SQlite Database Browser,如圖所示:

 

三、擴(kuò)展類

3.1擴(kuò)展SQLiteOpenHelper

  Android 不自動提供數(shù)據(jù)庫。在 Android 應(yīng)用程序中使用 SQLite,必須自己創(chuàng)建數(shù)據(jù)庫,然后創(chuàng)建表、索引,填充數(shù)據(jù)。Android 提供了 SQLiteOpenHelper 幫助你創(chuàng)建一個(gè)數(shù)據(jù)庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創(chuàng)建數(shù)據(jù)庫。SQLiteOpenHelper 類根據(jù)開發(fā)應(yīng)用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實(shí)現(xiàn)三個(gè)方法:

  構(gòu)造函數(shù),調(diào)用父類 SQLiteOpenHelper 的構(gòu)造函數(shù)

  onCreate()方法;// TODO 創(chuàng)建數(shù)據(jù)庫后,對數(shù)據(jù)庫的操作

  onUpgrage()方法。// TODO 更改數(shù)據(jù)庫版本的操作

  當(dāng)你完成了對數(shù)據(jù)庫的操作(例如你的 Activity 已經(jīng)關(guān)閉),需要調(diào)用 SQLiteDatabase 的 Close() 方法來釋放掉數(shù)據(jù)庫連接。

  操作數(shù)據(jù)庫的最佳實(shí)踐是創(chuàng)建一個(gè)輔助類,例如聯(lián)系人模塊

  class ContactsDatabaseHelper extends SQLiteOpenHelper

3.2 Cursor類

  Android使用Cursor類返回一個(gè)需要的值,Cursor作為一個(gè)指針從數(shù)據(jù)庫查詢返回結(jié)果集,使用Cursor允許Android更有效地管理它們需要的行和列,你使用ContentValues對象存儲鍵/值對,它的put()方法允許你插入不同數(shù)據(jù)類型的鍵值。

3.3 數(shù)據(jù)類型

  SQLite 和其他數(shù)據(jù)庫最大的不同就是對數(shù)據(jù)類型的支持,創(chuàng)建一個(gè)表時(shí),可以在 CREATE TABLE 語句中指定某列的數(shù)據(jù)類型,但是你可以把任何數(shù)據(jù)類型放入任何列中。當(dāng)某個(gè)值插入數(shù)據(jù)庫時(shí),SQLite 將檢查它的類型。如果該類型與關(guān)聯(lián)的列不匹配,則 SQLite 會嘗試將該值轉(zhuǎn)換成該列的類型。如果不能轉(zhuǎn)換,則該值將作為其本身具有的類型存儲。比如可以把一個(gè)字符串(String)放入 INTEGER 列。SQLite 稱這為“弱類型”(manifest typing.)。

四、數(shù)據(jù)庫操作

4.1創(chuàng)建和打開數(shù)據(jù)庫

  在Android中創(chuàng)建和打開一個(gè)數(shù)據(jù)庫都可以使用openOrCreateDatabase方法來實(shí)現(xiàn),因?yàn)樗鼤詣尤z測是否存在這個(gè)數(shù)據(jù)庫,如果存在則打開,如果不存在則創(chuàng)建一個(gè)數(shù)據(jù)庫:創(chuàng)建成功則返回一個(gè)SQLiteDatebase對象,否則拋出異常FileNotFoundException。

下面我們來創(chuàng)建一個(gè)名為Test的數(shù)據(jù)庫,并返回一個(gè)SQLiteDatabase對象mSQLiteDatabase。

mSQLiteDatabase=this.openOrCreateDatabase("Test",MODE_PRIVATE,null);

4.2創(chuàng)建表

  通過execSQL方法來執(zhí)行一條SQL語句。

String CREATE_TABLE="create table 表名(列名,列名,……)";
mSQLiteDatabase.execSQL(CREATE_TABLE);

  創(chuàng)建表的時(shí)候總要確定一個(gè)主鍵,這個(gè)字段是64位整型,別名_rowid。其特點(diǎn)就是自增長功能。當(dāng)?shù)竭_(dá)最大值時(shí),會搜索該字段未使用的值(某些記錄被刪除_rowid會被回收),所以要唯一嚴(yán)格增長的自動主鍵必須加入關(guān)鍵字autoincrement。

4.3刪除表

mSQLiteDatabase("drop table 表名");

4.4修改數(shù)據(jù)

4.4.1 插入記錄

可以使用insert方法來添加數(shù)據(jù),但是insert方法要求把數(shù)據(jù)都打包到ContentValues中,ContentValues其實(shí)就是一個(gè)Map,Key值是字段名稱,Value值是字段的值。通過ContentValues的put方法就可以把數(shù)據(jù)放到ContentValues對象中,然后插入到表中去。具體實(shí)現(xiàn)如下:

ContentValues cv=new ContentValues();
cv.put(TABLE_NUM,1);
cv.put(TABLE_DATA,"測試數(shù)據(jù)庫數(shù)據(jù)");
mSQLiteDatabase.insert(Test,null,cv);

//同樣可以使用execSQL方法來執(zhí)行一條“插入“的SQL語句

String INSERT_DATA="insert into 表名(列名,……) values (值,……)";
mSQLiteDatabase.execSQL(INSERT_DATA);

4.4.2 更新記錄

ContentValues cv=new ContentValues();
cv.put(TABLE_NUM,3);
cv.put(TABLE_DATA,"修改后數(shù)據(jù)");
mSQLiteDatabase.update(Test,cv,"num"+"="+rowId,null);

//同樣可以使用execSQL方法來執(zhí)行一條“更新”的SQL語句

String UPDATE_DATA="update 表名 set 列名=xxx where xxx;
mSQLiteDatabase.execSQL(UPDATE_DATA);

update 表名 set 列名=xxx [where條件]

4.4.3 刪除記錄

//要?jiǎng)h除數(shù)據(jù)可以使用delete方法
mSQLiteDatabase.delete("Test","WHERE _id="+0,null);

//也可以通過execSQL方法執(zhí)行SQL語句刪除數(shù)據(jù)
mSQLiteDatabase.execSQL("delete from 表名 where 條件");

4.5查詢

SELECT 列名 FROM 表名 WHERE 條件

例如在聯(lián)系人中保存3個(gè)聯(lián)系人,data表如下:

 

查詢data1值為10086的項(xiàng)

 

對查詢條件和返回值稍做修改

LIKE的使用

Like經(jīng)常和 %或者 _ 搭配使用。

%可與任意0個(gè)或者多個(gè)字符匹配,_可與任意單個(gè)字符匹配。

 

 

GLOB的使用

Glob與like非常相似,常與 * 搭配。

 

限定和排序

關(guān)鍵字:order、limit、offset。

Order分為asc(默認(rèn)升序),desc(降序)。

 

 

限定個(gè)數(shù)

 

指定偏移

 

內(nèi)連接:通過表中兩個(gè)字段進(jìn)行連接,找出兩個(gè)集合的交集。

  select  xxx from 表名1 inner join 表名2 on 表名1.列名 = 表名2.列名

左外連接:左表的所有項(xiàng)和內(nèi)連接項(xiàng)。

  select  xxx from 表名1 left outer join 表名2 on 表名1.列名 = 表名2.列名

五、高級特性

5.1 視圖

  視圖是虛擬表,它的內(nèi)容都派生自其它表的查詢結(jié)果。雖然它看起來像基本表,但是它不是,因?yàn)榛颈淼膬?nèi)容是持久的,而視圖的內(nèi)容是使用時(shí)動態(tài)產(chǎn)生的。

  create view 表名 as 定義

5.2 索引

  索引是一種用來在某種條件下加速查詢的結(jié)構(gòu)。

  create index 索引名 on 表名(列名)

5.3 觸發(fā)器

  觸發(fā)器的作用是當(dāng)具體的表發(fā)生特定的數(shù)據(jù)事件時(shí),執(zhí)行對應(yīng)的操作。

  create trigger 觸發(fā)器名 [before|after] [insert|delete|update|update of columns] on 表名 action

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(38)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)