Android SQLite (一) 数据库简介
大家好,今天來(lái)介紹一下SQLite的相關(guān)知識(shí),并結(jié)合Java實(shí)現(xiàn)對(duì)SQLite數(shù)據(jù)庫(kù)的操作。
SQLite是D.Richard Hipp用C語(yǔ)言編寫(xiě)的開(kāi)源嵌入式數(shù)據(jù)庫(kù)引擎。它支持大多數(shù)的SQL92標(biāo)準(zhǔn),并且可以在所有主要的操作系統(tǒng)上運(yùn)行。
SQLite由以下幾個(gè)部分組成:SQL編譯器、內(nèi)核、后端以及附件。SQLite通過(guò)利用虛擬機(jī)和虛擬數(shù)據(jù)庫(kù)引擎(VDBE),是調(diào)試、修改和擴(kuò) 展SQLite的內(nèi)核變得更加方便。所有SQL語(yǔ)句都被編譯成易讀的、可以在SQLite虛擬機(jī)中執(zhí)行的程序集。SQLite的整體結(jié)構(gòu)圖如下:
值得一提的是,袖珍型的SQLite竟然可以支持高達(dá)2TB大小的數(shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)都是以單個(gè)文件的形式存在,這些數(shù)據(jù)都是以B-Tree的數(shù)據(jù)結(jié)構(gòu)形式存儲(chǔ)在磁盤(pán)上。
在事務(wù)處理方面,SQLite通過(guò)數(shù)據(jù)庫(kù)級(jí)上的獨(dú)占性和共享鎖來(lái)實(shí)現(xiàn)獨(dú)立事務(wù)處理。這意味著多個(gè)進(jìn)程可以在同一時(shí)間從同一數(shù)據(jù)庫(kù)讀取數(shù)據(jù),但只有一 個(gè)可以寫(xiě)入數(shù)據(jù)。在某個(gè)進(jìn)程或線(xiàn)程想數(shù)據(jù)庫(kù)執(zhí)行寫(xiě)操作之前,必須獲得獨(dú)占鎖。在獲得獨(dú)占鎖之后,其他的讀或?qū)懖僮鲗⒉粫?huì)再發(fā)生。
SQLite采用動(dòng)態(tài)數(shù)據(jù)類(lèi)型,當(dāng)某個(gè)值插入到數(shù)據(jù)庫(kù)時(shí),SQLite將會(huì)檢查它的類(lèi)型,如果該類(lèi)型與關(guān)聯(lián)的列不匹配,SQLite則會(huì)嘗試將該值 轉(zhuǎn)換成該列的類(lèi)型,如果不能轉(zhuǎn)換,則該值將作為本身的類(lèi)型存儲(chǔ),SQLite稱(chēng)這為“弱類(lèi)型”。但有一個(gè)特例,如果是INTEGER PRIMARY KEY,則其他類(lèi)型不會(huì)被轉(zhuǎn)換,會(huì)報(bào)一個(gè)“datatype missmatch”的錯(cuò)誤。
概括來(lái)講,SQLite支持NULL、INTEGER、REAL、TEXT和BLOB數(shù)據(jù)類(lèi)型,分別代表空值、整型值、浮點(diǎn)值、字符串文本、二進(jìn)制對(duì)象。
下面,我們就來(lái)親自操作一下SQLite數(shù)據(jù)庫(kù)。
在操作之前,朋友們要先下載SQLite數(shù)據(jù)庫(kù),官方的下載頁(yè)面是http://sqlite.org/download.html, 我是在Windows下試驗(yàn),所以我選擇了Precompiled Binaries For Windows下面的sqlite-shell-win32-x86和sqlite-analyzer-win32-x86的zip包,前者是 SQLite數(shù)據(jù)庫(kù)引擎,后者是SQLite數(shù)據(jù)庫(kù)分析器,主要用于分析數(shù)據(jù)庫(kù)的狀態(tài)等信息,大家也可以根據(jù)自己的情況去下載。下載完成后分別解壓,得到 兩個(gè)可執(zhí)行文件,如圖:
這兩個(gè)文件可以根據(jù)自己的喜好放置在指定的位置,我將其放在D盤(pán)根目錄下。下面我們就來(lái)一步一步操作SQLite:
創(chuàng)建數(shù)據(jù)庫(kù):
[sql]?view plain?copy我 們執(zhí)行了sqlite3命令,參數(shù)就是數(shù)據(jù)庫(kù)的名稱(chēng),如果該數(shù)據(jù)庫(kù)已存在,則使用,如果不存在,則新建一個(gè),這里我們簡(jiǎn)單的在當(dāng)前位置創(chuàng)建了 test.db,你也可以在任何存在的并且可寫(xiě)的目錄下創(chuàng)建自己的數(shù)據(jù)庫(kù)。(如果對(duì)于SQLite的命令不太熟悉,可以執(zhí)行“.help”命令列出所有的 命令清單進(jìn)行查看)。
創(chuàng)建表:
[sql]?view plain?copy在我們創(chuàng)建表之后,可以用“.tables”命令去查看已有的表,用“.schema”命令去查看表的結(jié)構(gòu),如果后面沒(méi)有表名做參數(shù),則將會(huì)輸出所有表的建表語(yǔ)句。
插入數(shù)據(jù):
[sql]?view plain?copy從.sql文件導(dǎo)入數(shù)據(jù):
[sql]?view plain?copy分析數(shù)據(jù)庫(kù)使用狀態(tài):
[sql]?view plain?copy備份數(shù)據(jù)庫(kù):
備份 SQLite 數(shù)據(jù)庫(kù)有兩種方法。如果數(shù)據(jù)庫(kù)正在使用中,則應(yīng)從命令行界面使用 .dump 命令。這樣可以創(chuàng)建一個(gè)包含必要命令和數(shù)據(jù)的文件,從而重新創(chuàng)建數(shù)據(jù)庫(kù)。.dump 命令也可以用于備份數(shù)據(jù)庫(kù)表。
[sql]?view plain?copy我們可以指定輸出的目標(biāo)為一個(gè)文件,然后再使用命令時(shí),輸出信息就會(huì)寫(xiě)入指定的文件,如果想恢復(fù)為標(biāo)準(zhǔn)輸出,可以這樣設(shè)定:
[sql]?view plain?copy如果數(shù)據(jù)庫(kù)沒(méi)有處于使用狀態(tài),則可以直接將數(shù)據(jù)庫(kù)文件復(fù)制到安全位置。
最后,我們可以使用“.quit”或“.exit”退出SQLite。
管理工具:
現(xiàn)在網(wǎng)絡(luò)上的SQLite管理工具很多,我向大家推薦一款好用的工具:SQLite Expert。
在Java中使用SQLite:
我們要想在Java中使用SQLite,需要下載SQLite相關(guān)驅(qū)動(dòng),推薦大家到http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC頁(yè)面去下載最新的驅(qū)動(dòng)包,現(xiàn)在最新版本是sqlite-jdbc-3.7.2.jar,體積有點(diǎn)大,因?yàn)樗薒inux、Mac、Windows的本地類(lèi)庫(kù),如圖:
下載了驅(qū)動(dòng)之后,我們新建一個(gè)項(xiàng)目,名為sqlite:
在上圖中,我們引入sqlite驅(qū)動(dòng)包到類(lèi)路徑下,然后建立一個(gè)db的文件夾,用于放置數(shù)據(jù)庫(kù)文件。最后我們看一下Test.java代碼:
[java]?view plain?copy執(zhí)行Test.java文件,結(jié)果如下:
這個(gè)時(shí)候,在我們的db目錄下,就生成了一個(gè)test.db的文件:
SQLite使用須知:
目前沒(méi)有可用于 SQLite 的網(wǎng)絡(luò)服務(wù)器。從應(yīng)用程序運(yùn)行位于其他計(jì)算機(jī)上的 SQLite 的惟一方法是從網(wǎng)絡(luò)共享運(yùn)行。這樣會(huì)導(dǎo)致一些問(wèn)題,像 UNIX? 和 Windows? 網(wǎng)絡(luò)共享都存在文件鎖定問(wèn)題。還有由于與訪(fǎng)問(wèn)網(wǎng)絡(luò)共享相關(guān)的延遲而帶來(lái)的性能下降問(wèn)題。
SQLite 只提供數(shù)據(jù)庫(kù)級(jí)的鎖定。
SQLite 沒(méi)有用戶(hù)帳戶(hù)概念,而是根據(jù)文件系統(tǒng)確定所有數(shù)據(jù)庫(kù)的權(quán)限。
結(jié)束語(yǔ):
由于資源占用少、性能良好和零管理成本,嵌入式數(shù)據(jù)庫(kù)有了它的用武之地,像Android、iPhone都有內(nèi)置的SQLite數(shù)據(jù)庫(kù)供開(kāi)發(fā)人員使用,它的易用性可以加快應(yīng)用程序的開(kāi)發(fā),并使得復(fù)雜的數(shù)據(jù)存儲(chǔ)變得輕松了許多
? ? 本文轉(zhuǎn)自 一點(diǎn)點(diǎn)征服 ? 博客園博客,原文鏈接:http://www.cnblogs.com/ldq2016/p/5237684.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的Android SQLite (一) 数据库简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: RPC的原理总结
- 下一篇: Android帧缓冲区(Frame Bu