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