蔡紅軍
摘要:由于彈道目標(biāo)的特殊性,真實彈道目標(biāo)數(shù)據(jù)顯得十分珍貴,如何對歷史數(shù)據(jù)進行保存和管理,便于進行分析,充分發(fā)揮試驗數(shù)據(jù)的價值,變得越來越重要。本文針對這一問題,結(jié)合彈道目標(biāo)數(shù)據(jù)的特點,提出用人大金倉數(shù)據(jù)庫進行數(shù)據(jù)管理,同時利用MATLAB軟件進行數(shù)據(jù)分析,即解決了彈道目標(biāo)數(shù)據(jù)的存儲問題,同時又利用MATLAB軟件實現(xiàn)對數(shù)據(jù)的可視化分析。
關(guān)鍵詞:數(shù)據(jù)庫;人大金倉;數(shù)據(jù)庫訪問
中圖分類號:TP311.13 文獻標(biāo)識碼:A 文章編號:1007-9416(2017)11-0104-02
1 引言
彈道目標(biāo)數(shù)據(jù)由于保密的原因,很難獲得真實目標(biāo)的實測數(shù)據(jù),因此彈道目標(biāo)數(shù)據(jù)顯得十分珍貴。隨著參與外場試驗的次數(shù)越來越多,逐漸積累了大量寶貴的原始數(shù)據(jù),然而缺乏對現(xiàn)有的數(shù)據(jù)進行梳理,難以發(fā)揮有限試驗數(shù)據(jù)的價值,同時隨著時間的流逝,關(guān)鍵數(shù)據(jù)信息難免遺漏。因此,急需一個數(shù)據(jù)庫對現(xiàn)有的數(shù)據(jù)進行管理。
MATLAB軟件擅長于數(shù)據(jù)分析和可視化,同時MATLAB軟件中有一個為關(guān)系型數(shù)據(jù)庫和MATLAB進行數(shù)據(jù)交互提供接口函數(shù)支持的工具包Database Toolbox,其使用簡單,功能強大,通過其提供的接口函數(shù)極大簡化了MATLAB與關(guān)系型數(shù)據(jù)庫間的數(shù)據(jù)交互,而且它支持同時與多個數(shù)據(jù)庫的并行任務(wù)和大量數(shù)據(jù)集的分段輸入。在WINDOWS環(huán)境下,Database Toolbox支持JDBC驅(qū)動和ODBC驅(qū)動,然而Database Toolbox并不支持非結(jié)構(gòu)化大型對象(Large Object,LOB)數(shù)據(jù)的存儲。
本文結(jié)合彈道目標(biāo)數(shù)據(jù)的特點,采用人大金倉數(shù)據(jù)庫(KingbaseES)和MATLAB軟件完成數(shù)據(jù)的管理和分析,使用KingbaseES中TEXT數(shù)據(jù)類型,代替LOB數(shù)據(jù)類型。本文中的驅(qū)動配置方法和代碼程序均在MATLAB 2012b版本和KingbaseES V7版本下進行。
2 數(shù)據(jù)庫驅(qū)動配置
2.1 JDBC訪問技術(shù)
JDBC(Java Database Connectivity)是Java與數(shù)據(jù)庫的接口規(guī)范,它定義了一個支持標(biāo)準(zhǔn)SQL功能的通用應(yīng)用程序編程接口(API)。通過驅(qū)動程序管理器,JDBC API可利用不同的驅(qū)動程序連接不同的數(shù)據(jù)庫系統(tǒng),實現(xiàn)對數(shù)據(jù)庫的跨平臺訪問。
本文中MATLAB軟件基于JDBC驅(qū)動連接數(shù)據(jù)庫。
2.2 驅(qū)動配置方法
加載JDBC驅(qū)動過程如下:
(1)找到KingbaseES軟件安裝目錄,在Kingbase\ES\V7\jdbc文件夾下找到文件kingbasejdbc4.jar;
(2)找到MATLAB軟件的安裝目錄,進入MATLAB\R2012b\ java\jar\toolbox目錄,并將kingbasejdbc4.jar拷貝到此目錄下;
(3)找到MATLAB\R2012b\toolbox\loc-al目錄,打開classpath.txt文件,并在最后一行添加$matlabroot/java/jar/toolbox/kingbase-jdbc4.jar。
至此,驅(qū)動配置完成,如果MATLAB處于打開狀態(tài),需要重啟MATLAB。
2.3 訪問數(shù)據(jù)庫
完成2.2節(jié)的配置后,JDBC驅(qū)動就加載成功了,此時可以通過MATLAB軟件連接訪問數(shù)據(jù)庫。
連接代碼如下:
conn=database(instance,username,password,driver,databaseurl)
其中,instance表示數(shù)據(jù)庫名,username表示登錄用戶名,password表示登錄密碼,driver表示驅(qū)動名稱,databaseurl表示連接字符串。
假設(shè)已經(jīng)通過KingbaseES建立了RADARDATA數(shù)據(jù)庫,用戶名和密碼分別是system和123456,則MATLAB連接代碼如下:
conn=database(‘RADARDATA,system,123456,com.kingbase.Driver,jdbc://localhost:54321/RADARDATA)。
3 基于MATLAB的數(shù)據(jù)存儲
3.1 創(chuàng)建數(shù)據(jù)表
成功連接數(shù)據(jù)庫后,有兩種方式可以創(chuàng)建數(shù)據(jù)表,一是通過KingbaseES軟件在數(shù)據(jù)庫中創(chuàng)建;二是通過MATLAB軟件創(chuàng)建。假設(shè)要創(chuàng)建表的內(nèi)容如表1所示。在表1中index表示數(shù)據(jù)表中的數(shù)據(jù)序號;TaskDate表示任務(wù)日期;TRKID表示目標(biāo)編號;Time表示目標(biāo)獲取的時間,是一個一維向量;RCS表示目標(biāo)的RCS序列,是一個一維向量;Feature1表示RCS的第一個特征,是一個一維向量;Feature2表示RCS的第二個特征,是一個一維向量。
用MATLAB軟件創(chuàng)建表1內(nèi)容的代碼如下:
mktab = [‘CREATE TABLE RCSData(index integer, TaskDate date, TRKID integer, Time text, RCS text, Feature1 text, Feature2 text);
exec(conn, mktab);
3.2 保存數(shù)據(jù)
在上一節(jié)中,確定了RCSData表的內(nèi)容,并用MATLAB創(chuàng)建了數(shù)據(jù)表。接下來,利用MATLAB可以將大量數(shù)據(jù)快速地寫入到數(shù)據(jù)表中。
在表1中可以發(fā)現(xiàn),有幾列信息為向量類型,即含有多個元素,這種類型可以和KingbaseES中的text類型方便地轉(zhuǎn)換,也是選擇利用KingbaseES進行數(shù)據(jù)存儲的原因。endprint
用MATLAB軟件寫入數(shù)據(jù)庫數(shù)據(jù)的代碼如下:
Fastinsert(conn,RCSData,{‘index,TaskDate,TRKID,Time,RCS,F(xiàn)eature1,F(xiàn)eature2},{1,2017-11-1,1,num2str(1:10), num2str(rand(1,10)), num2str([1.1 2.1]), num2str([3.2 4.2])});
Fastinsert(conn,RCSData,{‘index,TaskDate,TRKID,Time,RCS,F(xiàn)eature1,F(xiàn)eature2},{2,2017-11-1,2,num2str(1:20), num2str(rand(1,20)), num2str([1.1 2.1 3.1]), num2str([3.2 4.2 5.2])});
Commit(conn);
利用上述代碼,在表中成功插入了兩組不同長度的RCS序列數(shù)據(jù)。因此,通過MATLAB軟件可以將歷史數(shù)據(jù)批量快速地導(dǎo)入數(shù)據(jù)庫,為數(shù)據(jù)管理與分析奠定了良好的基礎(chǔ)。
4 數(shù)據(jù)表內(nèi)容獲取與更新
上一節(jié)中將數(shù)據(jù)存入到了數(shù)據(jù)庫中,當(dāng)利用MATLAB進行數(shù)據(jù)分析的時候,需要將數(shù)據(jù)從數(shù)據(jù)庫中讀出來。用MATLAB軟件讀取數(shù)據(jù)庫數(shù)據(jù)的代碼如下:
curs=exec(conn,select * from RCSData);
curs=fetch(curs);
data=curs.data;
RCS=str2num(data{1,5});
close(curs);
假如只需要讀取指定目標(biāo)編號和RCS的信息,可以這樣寫:
curs=exec(conn,select TRKID,RCS from RCSData);
curs=fetch(curs);
data=curs.data;
TRKID=data{1,1};
RCS=str2num(data{1,2});
close(curs);
通過以上的方式,可以從數(shù)據(jù)庫中獲取彈道目標(biāo)數(shù)據(jù),從而可以利用MATLAB強大的數(shù)據(jù)處理功能和豐富的可視化函數(shù),開展對彈道目標(biāo)數(shù)據(jù)的分析。
在讀取數(shù)據(jù)后,如果用不同的方式重新計算了RCS序列的特征,需要對數(shù)據(jù)庫中RCS序列的特征進行更新,用MATLAB軟件更新數(shù)據(jù)庫數(shù)據(jù)的代碼如下:
update(conn,RCSData,{‘Feature1},{num2str([1.3 2.3])},where TRKID = 1);
update(conn,RCSData,{‘Feature1},{num2str([1.3 2.3 3.3])},where TRKID = 2);
commit(conn);
在完成對數(shù)據(jù)庫的操作后,需要關(guān)閉數(shù)據(jù)庫連接,MATLAB命令如下:
close(conn);
5 結(jié)語
本文針對彈道目標(biāo)數(shù)據(jù)的特點,利用KingbaseES實現(xiàn)了彈道目標(biāo)歷史數(shù)據(jù)的存儲,同時利用MATALB軟件實現(xiàn)了對數(shù)據(jù)庫的數(shù)據(jù)保存、讀取與更新。利用MATLAB和KingbaseES,即解決了彈道目標(biāo)歷史數(shù)據(jù)的管理問題,又利用MATALB軟件方便地對數(shù)據(jù)進行分析,能夠充分挖掘彈道目標(biāo)數(shù)據(jù)的信息,體現(xiàn)了歷史數(shù)據(jù)的價值。
參考文獻
[1]陳靜,范乃吉,袁曉東等.Matlab環(huán)境下的Oracle數(shù)據(jù)庫訪問技術(shù)[J].計算機應(yīng)用,2015,35(S1):78-82,97.
Abstract:Due to the particularity of the ballistic target, the real ballistic target data is very precious. It becomes more and more important how to save and manage the historical data, facilitate the analysis and give full play to the value of the experimental data. In this paper, in view of this issue, combined with the characteristics of the ballistic target data, put forward the data management using the KingbaseES database, while the use of MATLAB software for data analysis, that is, to solve the ballistic target data storage problems, while using MATLAB software to achieve data Visual analysis.
Key Words:Database; KingbaseES; Database accessendprint