鄭州輕工業(yè)學(xué)院 馬江濤 劉放美
SQLite在數(shù)據(jù)庫(kù)實(shí)驗(yàn)教學(xué)中的應(yīng)用探討*
鄭州輕工業(yè)學(xué)院 馬江濤 劉放美
SQLite的第一個(gè)Alpha版本誕生于2000年5月。SQLite是一款輕型數(shù)據(jù)庫(kù),也是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式系統(tǒng),而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了,它占用的系統(tǒng)資源非常低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存空間就夠了。它能夠支持Windows、Linux、Unix等主流操作系統(tǒng),同時(shí)能夠跟很多程序語(yǔ)言相結(jié)合,比如Tcl、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開(kāi)源世界著名的數(shù)據(jù)庫(kù)管理系統(tǒng),它的處理速度比他們都快。SQLite雖然很小巧,但是支持的SQL語(yǔ)句不會(huì)遜色于其他開(kāi)源數(shù)據(jù)庫(kù),它支持的SQL包括:ATTACHDATABASE,BEGINTRANSACTION,comment,COMMIT TRANSACTION,COPY,CREATE INDEX,CREATE TABLE,CREATE TRIGGER,CREATE VIEW,DELETE,DETACH DATABASE,DROP INDEX,DROP TABLE,DROP TRIGGER,DROP VIEW,END TRANSACTION,EXPLAIN,expression,INSERT,ON CONFLICT clause,PRAGMA,REPLACE,ROLLBACKTRANSACTION,SELECT,UPDATE。
同時(shí),它還支持事務(wù)處理等功能。SQLite支持跨平臺(tái),操作簡(jiǎn)單,能夠使用很多語(yǔ)言直接創(chuàng)建數(shù)據(jù)庫(kù),如果是個(gè)很小型的應(yīng)用,或者想做嵌入式開(kāi)發(fā),可以考慮使用SQLite。目前,它的最新版本是6.20,發(fā)布時(shí)間是2009年11月4日。它的官方網(wǎng)站是http://www.sqlite.org或http://www.sqlite.com.cn,能在上面獲得源代碼和文檔。同時(shí),因?yàn)閿?shù)據(jù)庫(kù)結(jié)構(gòu)簡(jiǎn)單,系統(tǒng)源代碼也不是很多,也適合想做研究數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)的專(zhuān)業(yè)人士。
SQLite的特性。ACID事務(wù)零配置指無(wú)需安裝和管理配置,儲(chǔ)存在單一磁盤(pán)文件中的一個(gè)完整的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)文件可以在不同字節(jié)順序的機(jī)器間自由的共享,比一些流行的數(shù)據(jù)庫(kù)在大部分普通數(shù)據(jù)庫(kù)操作要快和簡(jiǎn)單,同時(shí)通過(guò)Wrapper支持其他語(yǔ)言的綁定,良好注釋的源代碼,有著90%以上的測(cè)試覆蓋率,并且沒(méi)有額外的依賴(lài),Source完全Open使用,你可用于任何用途,且支持多種開(kāi)發(fā)語(yǔ)言,如C、PHP、Perl、Java、ASP.NET和Python等語(yǔ)言。
1.支持絕大多數(shù)的SQL92標(biāo)準(zhǔn)的關(guān)系型數(shù)據(jù)庫(kù),包括索引、限制、觸發(fā)和查看。通過(guò)數(shù)據(jù)庫(kù)的獨(dú)立性和共享鎖實(shí)現(xiàn)獨(dú)立事系處理。但不支持引用完整性的外鍵限制,其他不支持的方面在應(yīng)用時(shí)通過(guò)參考文獻(xiàn)查看。
2.建立的每個(gè)數(shù)據(jù)庫(kù)分別存儲(chǔ)在一個(gè)獨(dú)立的不依賴(lài)其他文件的單一數(shù)據(jù)庫(kù)文件中。這符合嵌入式數(shù)據(jù)庫(kù)的文件數(shù)據(jù)庫(kù)要求,邊衡數(shù)據(jù)庫(kù)的發(fā)布。
3.官方網(wǎng)站上的源程序提供了C和TCL語(yǔ)言接口,可通過(guò)第三方的接口程序?qū)崿F(xiàn)對(duì)其他語(yǔ)言的支持,如通過(guò)JDBC接口實(shí)現(xiàn)對(duì)Jova接口程序的支持。
4.數(shù)據(jù)庫(kù)最大可以達(dá)到2TB,最小可以?xún)H幾百KB,甚至可以更小。
5.提供了對(duì)事務(wù)功能和并發(fā)處理的支持。
6.SQLite不同于Server數(shù)據(jù)庫(kù)。它和程序運(yùn)行在同一進(jìn)程中,運(yùn)行過(guò)程中沒(méi)有其他進(jìn)程的通信,所以速度快、體積小、易于分發(fā),適合在單機(jī)環(huán)境中運(yùn)行。
一般而言,計(jì)算機(jī)軟件實(shí)驗(yàn)的基本作用是對(duì)特定軟件系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)原則進(jìn)行示范。實(shí)驗(yàn)的輔助作用還有:對(duì)課堂教學(xué)中的結(jié)論進(jìn)行驗(yàn)證,對(duì)課堂教學(xué)中的方法進(jìn)行運(yùn)用,補(bǔ)充課堂教學(xué)的不足。
傳統(tǒng)的數(shù)據(jù)庫(kù)原理實(shí)驗(yàn)課程理想的支撐環(huán)境是:局域網(wǎng)(如Novell NetWare、Microsoft Windows NT Advanced Server等);支持ANSI/ISO SQL2及SQL1999(SQL3)標(biāo)準(zhǔn)的SQL RDBMS(如Oracle、IBM UDB DB2、InformixDynamicServer、Microsoft SQL Server 2000、Sybase Adaptive Server Enterprise、MySQL較新的版本等),并配置必要SQL交互接口;嵌入式SQL及預(yù)編譯器;ER/UML CASE工具和前端工具;等。若以上標(biāo)準(zhǔn)配置不能滿(mǎn)足需求,另有替代配置:提供SQL交互接口的RDBMS(如Microsoft Access、Visual FoxPro等)。
進(jìn)入系統(tǒng)開(kāi)始菜單后,運(yùn)行cmd命令,進(jìn)入C:Documents and SettingsAdministrator,進(jìn)入到E盤(pán)paper的sqlite子目錄下,數(shù)據(jù)庫(kù)管理系統(tǒng)sqlite3.exe以及數(shù)據(jù)庫(kù)first.db在此目錄下。在命令行輸入sqlite3.exe和first.db(它們之間必須有空格)就進(jìn)入sqlite數(shù)據(jù)庫(kù)管理系統(tǒng),會(huì)看到如下顯示:
E:papersqlite>sqlite3.exe first.db
SQLite version 3.6.10
Enter“.help”for instructions
Enter SQL statements terminated with a“;”
此版本是sqlite的3.6.10,我們可以用.help來(lái)查看幫助信息。如果是關(guān)于sqlite的內(nèi)部命令則都是以開(kāi)始命令開(kāi)始,如果輸入的是SQL語(yǔ)句命令必須以結(jié)束命令結(jié)束。
SQLite是無(wú)類(lèi)型的??梢员4嫒魏晤?lèi)型的數(shù)據(jù)到所想要保存的任何表的任何列中,無(wú)論這列聲明的數(shù)據(jù)類(lèi)型是什么。對(duì)于SQLite來(lái)說(shuō)對(duì)字段不指定類(lèi)型是完全有效的,字段類(lèi)型為主鍵時(shí)除外。如Create Table ex1(a,b,c),SQLite允許忽略數(shù)據(jù)類(lèi)型,但是仍然建議在你的Create Table語(yǔ)句中指定數(shù)據(jù)類(lèi)型。因?yàn)閿?shù)據(jù)類(lèi)型對(duì)于你和其他的程序員交流,或者你準(zhǔn)備換掉你的數(shù)據(jù)庫(kù)引擎。SQLite支持常見(jiàn)的數(shù)據(jù)類(lèi)型,如CREATE TABLE ex2(aVARCHAR(10)、bNVARCHAR(15)、cTEXT、d INTEGER、eFLOAT、fBOOLEAN、gCLOB、hBLOB、i TIMESTAMP,j NUMERIC(10,5),k VARYING CHARACTER(24),l NATIONAL VARYING CHARACTER(16))。我們可以使用SQLite的管理工具,如sqlitemanager來(lái)更好的使用SQLite數(shù)據(jù)庫(kù)。
SQLite作為一個(gè)開(kāi)源的嵌入式數(shù)據(jù)庫(kù)產(chǎn)品,具有系統(tǒng)體積小、檢索效率高的特性,對(duì)于嵌入式場(chǎng)合和工業(yè)控制過(guò)程中的數(shù)據(jù)存儲(chǔ),實(shí)現(xiàn)管理、執(zhí)行、維護(hù)的簡(jiǎn)單化。在Windows應(yīng)用程序的開(kāi)發(fā)中,由于SQLite零配置的特性,生成的Windows應(yīng)用程序不需要進(jìn)行數(shù)據(jù)庫(kù)各程操作,同時(shí)具有廣闊的應(yīng)用范圍,目前已廣泛應(yīng)用于中小型網(wǎng)站的后臺(tái)數(shù)據(jù)庫(kù)和內(nèi)存數(shù)據(jù)庫(kù)中。
和傳統(tǒng)的數(shù)據(jù)庫(kù)原理實(shí)驗(yàn)相比,SQLite入門(mén)比較簡(jiǎn)單,學(xué)生操作起來(lái)所見(jiàn)即所得,學(xué)生可以根據(jù)自己的應(yīng)用需求來(lái)設(shè)計(jì)相應(yīng)的數(shù)據(jù)庫(kù)管理系統(tǒng),且占用系統(tǒng)資源小,學(xué)生可以把數(shù)據(jù)庫(kù)發(fā)在郵箱里面,可以實(shí)現(xiàn)隨時(shí)隨地都能設(shè)計(jì)使用數(shù)據(jù)庫(kù)的效果。但是在實(shí)驗(yàn)中應(yīng)該注意,某些學(xué)生對(duì)基于命令行的語(yǔ)句輸入不太熟悉,需要加強(qiáng)DOS命令的練習(xí)。另外,SQLite源代碼開(kāi)放,學(xué)生在學(xué)習(xí)的同時(shí),還可以進(jìn)行深入地研究,自行開(kāi)發(fā)適合某種特定需求的數(shù)據(jù)庫(kù)管理系統(tǒng)。
河南省科技攻關(guān)項(xiàng)目“嵌入式數(shù)據(jù)庫(kù)系統(tǒng)”(0424220008)。