摘 要:在戶外等特殊環(huán)境下,水文信息的采集與存儲(chǔ)對(duì)數(shù)據(jù)庫(kù)提出了特殊需求。SQLite數(shù)據(jù)庫(kù)在嵌入式數(shù)據(jù)庫(kù)中具有可移植性、開源性和高效性等諸多優(yōu)點(diǎn),針對(duì)戶外嵌入式應(yīng)用環(huán)境存儲(chǔ)采集的水文信息,本文討論了一種基于SQLite嵌入式數(shù)據(jù)庫(kù)的存儲(chǔ)方法,包括水文信息存儲(chǔ)模型的設(shè)計(jì)、相關(guān)編程模式等內(nèi)容,為水文信息的存儲(chǔ)提供了一種高效的手段。
關(guān)鍵詞:水文信息;SQLite;嵌入式數(shù)據(jù)庫(kù)
中圖分類號(hào):TD632
隨著現(xiàn)代電子技術(shù)、傳感技術(shù)、通信技術(shù)和計(jì)算機(jī)技術(shù)的迅速發(fā)展,水文信息自動(dòng)采集與監(jiān)測(cè)程度越來越高,能夠及時(shí)準(zhǔn)確采集所需水文數(shù)據(jù)并匯總到中心數(shù)據(jù)庫(kù)輔助決策支持,大大降低了惡劣氣候引發(fā)的水患對(duì)國(guó)民經(jīng)濟(jì)的影響。然而在一些特殊戶外環(huán)境下,比如處理堰塞湖等,由于硬件系統(tǒng)體積龐大等原因,傳統(tǒng)的數(shù)據(jù)庫(kù)如Oracle類桌面數(shù)據(jù)庫(kù)系統(tǒng)無法有效工作,需要研究適合嵌入式環(huán)境應(yīng)用的水文信息采集與存儲(chǔ)方法。
嵌入式數(shù)據(jù)庫(kù)因其良好的可靠性、卓越的實(shí)時(shí)性被廣泛地應(yīng)用于機(jī)械控制、軍事打擊、航空航天、醫(yī)療診斷和地理測(cè)繪等領(lǐng)域,因此采用嵌入式數(shù)據(jù)庫(kù)存儲(chǔ)和管理水文信息是一種較為合理的選擇。在嵌入式數(shù)據(jù)庫(kù)家族中,SQLite數(shù)據(jù)庫(kù)具有可移植性、開源性和高效性等諸多優(yōu)點(diǎn),近年來得到廣泛應(yīng)用,因此本文研究一種基于SQLite數(shù)據(jù)庫(kù)的水文信息存儲(chǔ)方法,以提高嵌入式環(huán)境下管理采集水文信息的能力。
1 嵌入式數(shù)據(jù)庫(kù)SQLite
SQLite是2000年發(fā)布的一款輕型的關(guān)系型數(shù)據(jù)庫(kù),是一個(gè)小型的C語言鏈接庫(kù),內(nèi)嵌高效的數(shù)據(jù)庫(kù)引擎,可方便應(yīng)用于嵌入式系統(tǒng)。SQLite提供對(duì)SQL92的大多數(shù)支持,簡(jiǎn)單易用,速度很快,并提供豐富的數(shù)據(jù)庫(kù)接口,且不需要特殊的數(shù)據(jù)庫(kù)管理器和配置數(shù)據(jù)庫(kù);SQLite代碼高效,短小精悍,完整配置少于250KB,運(yùn)行速度比普通的C/S數(shù)據(jù)庫(kù)系統(tǒng)更快;SQLite源代碼完全開放,移植性強(qiáng),可以應(yīng)用于很多主流嵌入式操作系統(tǒng)平臺(tái)如Android、iOS和WinCE等;SQLite能夠與很多程序語言相結(jié)合,比如C#、C/C++和Java等,編程方便,且速度優(yōu)于MySql數(shù)據(jù)庫(kù)。由于SQLite開源性和可移植性等優(yōu)點(diǎn),使得它的應(yīng)用領(lǐng)域日益廣泛。在嵌入式應(yīng)用程序開發(fā)方面,SQLite是嵌入式輕量級(jí)數(shù)據(jù)庫(kù)的首選。經(jīng)過12年的發(fā)展,SQLite 已發(fā)布版本3。
SQLite擁有層次化和模塊化的體系結(jié)構(gòu),并引入了一些高效簡(jiǎn)潔的方法管理關(guān)系型數(shù)據(jù)庫(kù)。它由8個(gè)獨(dú)立模塊組成,如所圖1所示。
圖1 SQLite體系結(jié)構(gòu)
2 水文信息的存儲(chǔ)
選取合適嵌入式數(shù)據(jù)庫(kù)SQLite后,從應(yīng)用方面設(shè)計(jì)針對(duì)水文信息的數(shù)據(jù)存儲(chǔ)方案。
2.1 水文信息表結(jié)構(gòu)
水文信息不僅包括水文站名、地理坐標(biāo)等靜態(tài)信息,還包括時(shí)間、水位、流速、流向等動(dòng)態(tài)信息。設(shè)計(jì)水文信息存儲(chǔ)模型及表結(jié)構(gòu),將其劃分為水文站信息表、水文信息表兩大類。各類信息表說明如下:
(1)水文站表信息:存儲(chǔ)水文站信息,主要屬性包括水文站編碼、名稱、地理坐標(biāo)、等級(jí)等。在水文站表中每個(gè)水文站對(duì)應(yīng)一條記錄。
(2)水文表信息:存儲(chǔ)采集的水文信息,包括時(shí)間、水位、流速、流向和水質(zhì)等。在水文信息表中,當(dāng)前水文站每一條水文信息對(duì)應(yīng)一條記錄。對(duì)于實(shí)時(shí)變化的水文信息,根據(jù)應(yīng)用需要,定時(shí)采集或者水位、水流變化超過閾值時(shí)再采集,可減少無用信息采集量。
表1 水文站信息表 HYD_STATION
字段名稱字段類型/長(zhǎng)度字段說明
StationIDinteger水文站編碼(主鍵)
StationNameChar(24)水文站名稱
RiverNameChar(24)監(jiān)測(cè)河流名稱
SetupTimeTime建站時(shí)間
Longitudedouble經(jīng)度
Latitudedouble緯度
Heightdouble高程
Gradeinteger等級(jí)
表2 水文信息表 HYD_INFO
字段名稱字段類型字段說明
StationIDinteger水文站編碼
CapTimeTime采集時(shí)間
WarnWaterLevelinteger警戒水位
CurWaterLevelinteger當(dāng)前水位
WaterVelocityinteger當(dāng)前流速
WaterVolumeinteger當(dāng)前流量
RecNotechar (20)備注信息
2.2 水文信息錄入與存儲(chǔ)
在水文站表支持下,當(dāng)錄入時(shí)間間隔到或者水位情況明顯變化時(shí),可錄入當(dāng)前水位信息,包括水位站名、采集時(shí)間、警戒水位、當(dāng)前水位、當(dāng)前流速和備注信息。字段編輯結(jié)束,則將當(dāng)前信息存儲(chǔ)數(shù)據(jù)庫(kù)水位信息表中。
針對(duì)編輯和錄入內(nèi)容,采用EVC編程,創(chuàng)建工程后,需要集成相應(yīng)的SQLite應(yīng)用包,包括可執(zhí)行文件、庫(kù)文件和頭文件;當(dāng)采用版本3時(shí),對(duì)應(yīng)文件為SQLite3.exe、SQLite3.lib、SQLite3.dll 和SQLite3.h,并注意需要將可執(zhí)行文件exe和庫(kù)文件(*.dll + *.lib)放在同一目錄下。
針對(duì)錄入的水位信息,基于ADO編程模式,支持通用SQL操作。
針對(duì)記錄操作結(jié)果,包括保存記錄、查詢記錄、刪除記錄和更新記錄等,可借助與SQLite開發(fā)配套的相當(dāng)成熟的可視化管理工具,如sqlitebrowser、Sqliteman或SQliteManager,來快速驗(yàn)證操作結(jié)果的正確性。
3 結(jié)束語
SQLite嵌入式數(shù)據(jù)庫(kù)具有很多優(yōu)點(diǎn),可廣泛應(yīng)用于軍事航天、智能終端、醫(yī)療設(shè)備和信息家電等多個(gè)領(lǐng)域。本文結(jié)合特殊環(huán)境應(yīng)用需求,討論了使用SQLite存儲(chǔ)采集的水文信息,包括水文信息存儲(chǔ)模型、表結(jié)構(gòu)、編程模式等內(nèi)容。隨著水文建設(shè)信息化的進(jìn)一步推進(jìn),在嵌入式領(lǐng)域,SQLite數(shù)據(jù)庫(kù)將會(huì)得到更多應(yīng)用。
參考文獻(xiàn):
[1]曹艷蕓.嵌入式數(shù)據(jù)庫(kù)發(fā)展?fàn)顩r研究[J].電子產(chǎn)品世界,2010,17(03):16-18.
[2]岑冬梅.基于SQLite的空間數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù)的研究與實(shí)現(xiàn)[D].武漢:武漢科技大學(xué),2009.
[3]Grant Allen,Mike Owens著,楊謙,劉義宣譯.SQLite權(quán)威指南[M].北京:電子工業(yè)出版社,2012.
作者簡(jiǎn)介:李婧(1979-),女,研究生,工程師,從事水利信息化建設(shè)和應(yīng)用研究工作。
作者單位:河南省水利信息中心,鄭州 450003