文|陳雷
我國是個邊疆遼闊的國家,與多個國家相鄰,過境線較長,而且地域跨度大,地形起伏多變,況且隨著改革開放的不斷深入,邊境線的形勢日趨復(fù)雜,走私偷渡形勢比較嚴(yán)峻,這些都給官兵的執(zhí)勤增加了難度。筆者在邊防工作多年,深知掌握復(fù)雜多變的邊境形勢對官兵的難度。因此開發(fā)一個基于數(shù)據(jù)庫的手持設(shè)備很有必要,這樣可以使官兵隨時獲取所需的準(zhǔn)確邊境信息,增強(qiáng)執(zhí)勤效果,有力打擊走私偷渡者,保證邊境的安全。
嵌入式數(shù)據(jù)庫技術(shù)具有把數(shù)據(jù)庫表嵌入到應(yīng)用程序進(jìn)程中,并使應(yīng)用程序能夠進(jìn)行本地直接訪問以獲取數(shù)據(jù)庫信息,從而得到所需結(jié)果的顯著特點(diǎn)。在邊境管控系統(tǒng)構(gòu)建中,可以充分利用嵌入式數(shù)據(jù)庫SQLite的這特點(diǎn),實現(xiàn)在任何環(huán)境下對邊境信息資源的使用需求,提高軍事應(yīng)用中的服務(wù)效率。本文主要著眼在任何環(huán)境下邊境信息訪問問題的解決,重點(diǎn)討論研究基于SQLite構(gòu)建一個邊境管控信息數(shù)據(jù)庫的初步方法。
2000年,D.Richard Hipp立足小型、快速和最小化管理的設(shè)計思想,開發(fā)出一個基于C語言實現(xiàn)的小型數(shù)據(jù)庫:SQLite,主要通過實現(xiàn)了一個獨(dú)立的、嵌入式的、零配置的SQL數(shù)據(jù)庫引擎,達(dá)成能夠?qū)榍度胧较到y(tǒng)服務(wù)的設(shè)計目的。
SQLite主要特點(diǎn):
完全免費(fèi):SQLite的源代碼無任何版權(quán)限制,具有完全免費(fèi)的特點(diǎn),既可以減少產(chǎn)品的開發(fā)和生產(chǎn)成本,也可以為后期產(chǎn)品的穩(wěn)定運(yùn)行和維護(hù)修改提供較為徹底的解決方法。
易于共享:SQLite數(shù)據(jù)庫很容易實現(xiàn)文件被共享。一方面,一個單獨(dú)、普通的磁盤文件就可以是整個SQLite的存放形式;另一方面,SQLite由于以C庫的形式提供給應(yīng)用程序調(diào)用,從而沒有服務(wù)進(jìn)程,確保使用SQLite的應(yīng)用進(jìn)程能夠通過直接讀寫磁盤數(shù)據(jù)庫文件來訪問數(shù)據(jù)庫。
理想平衡:SQLite數(shù)據(jù)庫以其最小能夠小于170KB的代碼空間,既具備非常緊湊的代碼體積,又提供數(shù)據(jù)庫系統(tǒng)最常用的功能,在代碼體積大小與系統(tǒng)功能之間實現(xiàn)了一個理想的平衡。
BackendCoreinterfaceSQL Command processerVirtual MachineTokenizerB-TreePagerOS InterfaceParserCode GeneratorUtilitiesTest CodeAccessoriesSQLcompiler SQLite的各個模塊之間及總的體系結(jié)構(gòu)的相互關(guān)系。
接口層(Interface):SQLite通過位于頂層的接口層(Interface)向應(yīng)用程序提供服務(wù),主要包括接收來自于應(yīng)用程序的SQL語句字符串,并將所接收的SQL語句字符串傳送給標(biāo)記分析器(Tokenizer)和語法解析器(Parser)進(jìn)行分析,在此分析基礎(chǔ)上,代碼生成器(Code Generator)生成虛擬機(jī)指令碼使用能在虛擬機(jī)(Virtual Machine)上執(zhí)行。
虛擬機(jī):虛擬機(jī)是SQLite的核心,是一個抽象計算環(huán)境,專為管理數(shù)據(jù)庫文件而設(shè)計,能夠通過其中指令的執(zhí)行,確保SQLite完成SQL語句所請求的相關(guān)功能。
B-樹(B-Tree):SQLite數(shù)據(jù)庫的維護(hù)實現(xiàn)通過使用B-樹(B-Tree)在磁盤上進(jìn)行。相同的磁盤文件存放所有的B-樹,一個單獨(dú)的B-樹可供數(shù)據(jù)庫中的每個表和索引使用。B-樹模塊從磁盤請求調(diào)用固定大小的數(shù)據(jù)塊,高速頁緩存(PageCache)負(fù)責(zé)讀寫和緩存數(shù)據(jù)塊,同時提供回退、原子操作及對數(shù)據(jù)庫文件加鎖等。通過高速頁緩存提供的緩沖機(jī)制,避免了頻繁進(jìn)行I/O操作而降低應(yīng)用程序的性能。
操作系統(tǒng)抽象接口層:移植工作最關(guān)心的層次是最底層的操作系統(tǒng)抽象接口層。為了屏蔽底層不同操作系統(tǒng)的具體實現(xiàn),操作系統(tǒng)抽象層接口在os.h中定義統(tǒng)一的抽象接口供高速頁緩存調(diào)用。
總之,遵從軟件工程的分層設(shè)計思想,SQLite的設(shè)計將整個數(shù)據(jù)庫系統(tǒng)分成幾個不同層次的模塊分別進(jìn)行實現(xiàn),其設(shè)計思路清楚,模塊功能劃分明確,既方便維護(hù)升級,也便于不同計算平臺間的移植。
邊境管控系統(tǒng)功能主要體現(xiàn)在對數(shù)據(jù)的查詢與更新上。邊防官兵是系統(tǒng)的使用者,他們在執(zhí)勤過程中運(yùn)用它要能隨時隨地的對邊境信息進(jìn)行查詢操作。這里存放的信息主要分為我方和對方兩種,因為不是一個國家,擁有的信息是不同的。這個系統(tǒng)并不是任何人都有權(quán)力使用,所有能夠使用的官兵都擁有被授權(quán)的登陸用戶名和密碼,這樣才能有效地防止失泄密。系統(tǒng)還有一個超級管理員用戶,他能夠根據(jù)近期邊境信息的變化情況對系統(tǒng)進(jìn)行不定期的更新操作,使這個系統(tǒng)能夠把上級及友鄰單位傳遞過來的信息能夠及時地更新到這個系統(tǒng)中,同時他還有權(quán)限添加普通使用者的用戶名及密碼。在這個系統(tǒng)中,使用者可以根據(jù)想了解的分類標(biāo)題進(jìn)行選擇,最后生成一個信息的報表。
為了達(dá)到上述的要求,必須在便攜式設(shè)備中裝入嵌入式數(shù)據(jù)庫,所有邊境信息都首先存入該數(shù)據(jù)庫中,由數(shù)據(jù)庫統(tǒng)一管理和存儲,以保證執(zhí)勤官兵能夠隨時隨地的對邊境信息的查詢。當(dāng)邊境形勢有新的情況變化時超級管理員可以及時對其進(jìn)行更新操作,以保證該設(shè)備中的數(shù)據(jù)最新。由此可見,在邊境管控系統(tǒng)中裝載嵌入式數(shù)據(jù)庫可以大大提高設(shè)備的易用性和易維護(hù)性,發(fā)揮小型設(shè)備的最大效能,增強(qiáng)官兵的執(zhí)勤效果。
邊境管控信息系統(tǒng)功能設(shè)計:系統(tǒng)的功能主要包括信息瀏覽、信息更新、選擇國別、系統(tǒng)退出四個模塊。
信息瀏覽功能:
信息瀏覽是邊境管理信息系統(tǒng)的基本功能之一,主要是根據(jù)個人需要查看相應(yīng)的邊境信息,一般包含連隊情況、界標(biāo)情況、越境情況、當(dāng)?shù)孛袂榈人膫€方面的內(nèi)容,其中系統(tǒng)默認(rèn)瀏覽中國信息。
信息瀏覽功能還應(yīng)包括信息查找子功能,通過建立“系統(tǒng)功能”菜單實現(xiàn)相應(yīng)操作的選擇。信息查找功能是在當(dāng)前數(shù)據(jù)表中輸入查找與文本框內(nèi)容相關(guān)的信息,并將搜索到的相關(guān)信息顯示在列表框中,其中查找信息的文本框設(shè)置為非空。
信息更新功能:
信息更新功能主要是基于數(shù)據(jù)庫可視化的后臺管理,分為數(shù)據(jù)庫內(nèi)容和結(jié)構(gòu)維護(hù)。首先,設(shè)置登錄權(quán)限,區(qū)分普通管理員和超級管理員,其中普通管理員僅能夠?qū)?shù)據(jù)庫內(nèi)容進(jìn)行瀏覽,而超級管理員既能夠?qū)?shù)據(jù)庫的內(nèi)容進(jìn)行瀏覽和修改,還能夠?qū)?shù)據(jù)庫的結(jié)構(gòu)進(jìn)行修改。
邊境管理信息系統(tǒng)的后臺數(shù)據(jù)庫應(yīng)當(dāng)立足存儲邊境信息的數(shù)據(jù)庫、記錄系統(tǒng)所有數(shù)據(jù)庫信息的數(shù)據(jù)庫和用戶信息數(shù)據(jù)庫等進(jìn)行框架設(shè)計。
邊境信息數(shù)據(jù)庫包括了所有的信息索引數(shù)據(jù)表和信息內(nèi)容數(shù)據(jù)表。用戶信息數(shù)據(jù)庫是用來保存用戶信息,包括數(shù)據(jù)表登陸窗口。登陸窗口包括用戶名、密碼和權(quán)限。記錄系統(tǒng)所有數(shù)據(jù)信息數(shù)據(jù)庫是用來記錄系統(tǒng)所有的數(shù)據(jù)庫名和相應(yīng)的數(shù)據(jù)表名。
下面我們通過SQLite在邊境管控信息查詢系統(tǒng)中的用戶登陸信息數(shù)據(jù)庫來講解一下SQLite的具體應(yīng)用。首先我們需要建立數(shù)據(jù)庫,具體數(shù)據(jù)庫的形式如下:
CREATE TABLE login (
id integer primary key ,
usrtname varchar(40),
password integer,
authority varchar(40),
);
這里有兩種選擇,可以在sqlite提示符下建立數(shù)據(jù)庫,也可以用c語言調(diào)用sqlite_exec()實現(xiàn);接下來調(diào)用sqlite_open()打開數(shù)據(jù)庫;然后調(diào)用sqlite_prepare()和sqlite_step(),sqlite _finalize()從數(shù)據(jù)庫中取回數(shù)據(jù)送界面窗口與輸入比較;最后調(diào)用sqlite _close()關(guān)閉數(shù)據(jù)庫。
主函數(shù)如下:
main()
{
int rc;
rc=sqlite3_open(str,&db);//打開名為 str 的數(shù)據(jù)庫,如果不存在,就新建數(shù)據(jù)庫
if(rc){
fprintf(stderr,“打開數(shù)據(jù)庫錯誤 !”,sqlite3_errmsg(db));
sqlite3_close(db); //關(guān)閉數(shù)據(jù)庫
return 1;
}
else
return 0;
sql=”select username,password,authority from login”;
rc=sqlite3_prepare(db,sql,strlen(sql),&stmt,&tail);
if (rc !=SQLITE_OK){
fprintf(stderr,”SQL error: %s n%s ”,sqlite3_errmsg(db));
}
rc=sqlite3_step(stmt);
ncols=sqlite3_column_count(stmt);
while(rc== SQLITE_ROW){
for(i=0,i fprintf(stderr,”%s ”,sqlite3_column_text(stmt,i)); } fprintf(stderr,”
”); rc=sqlite3_step(stmt); } sqlite3_finalize(stmt); sqlite3_close(db); return 0; } 總之,本文著眼SQLite數(shù)據(jù)庫占用資源少、性能良好和零管理成本等顯著特點(diǎn),著力發(fā)揮嵌入式數(shù)據(jù)庫在軍事方面應(yīng)用,通過利用嵌入式數(shù)據(jù)庫SQLite實現(xiàn)了對過境管控信息資源的有效管理,在一定程度上較好地滿足了任何環(huán)境下對邊境信息資源及時方便查詢與更新的需求。結(jié)束語