倪曼蒂,馬建明
(湖南商務(wù)職業(yè)技術(shù)學(xué)院 湖南長(zhǎng)沙,410205)
基于web及riversql的數(shù)據(jù)庫(kù)管理方案
倪曼蒂,馬建明
(湖南商務(wù)職業(yè)技術(shù)學(xué)院 湖南長(zhǎng)沙,410205)
出于安全考慮,將服務(wù)器所在網(wǎng)段與辦公電腦所在網(wǎng)段進(jìn)行隔離,卻為應(yīng)用系統(tǒng)的數(shù)據(jù)導(dǎo)入、導(dǎo)出等操作帶來(lái)不便。本文在riversql的基礎(chǔ)上,提出了一種基于web的數(shù)據(jù)庫(kù)管理方案,用于對(duì)各系統(tǒng)各類型數(shù)據(jù)庫(kù)的綜合管理。
數(shù)據(jù)庫(kù)管理;riversql
隨著一年一度高招工作的臨近,高等院校網(wǎng)絡(luò)安全面臨新一輪考驗(yàn),其中一種常見(jiàn)方式為通過(guò)職工的機(jī)器間接地獲取信息。為了防止黑客再次通過(guò)這樣的手段攻擊服務(wù)器,可將服務(wù)器所在的網(wǎng)段與職工電腦所在的網(wǎng)段進(jìn)行隔離,以防止不法份子攻擊服務(wù)器,破壞或盜取相關(guān)的資料信息。而實(shí)際情況下,這樣的措施雖然提高了服務(wù)器的安全性和可靠性,卻為網(wǎng)絡(luò)中心的日常數(shù)據(jù)運(yùn)維帶來(lái)了不便,包括數(shù)據(jù)導(dǎo)入、導(dǎo)出,報(bào)表生成等。因此,我們希望能開(kāi)發(fā)一個(gè)工具來(lái)解決當(dāng)前的問(wèn)題。
目前我院系統(tǒng)使用的數(shù)據(jù)庫(kù)包括mysql及ms sqlserver這兩種常用數(shù)據(jù)庫(kù),考慮到未來(lái)發(fā)展,這個(gè)數(shù)據(jù)庫(kù)管理工具需要支持mysql、ms sqlserver以及oracle等幾種常用的數(shù)據(jù)庫(kù)的基本操作,滿足對(duì)數(shù)據(jù)表的增、刪、查、改功能,并且對(duì)查詢結(jié)果進(jìn)行導(dǎo)出。另外,因?yàn)槭褂谜呖赡艽嬖谑褂貌划?dāng)?shù)那闆r,例如當(dāng)執(zhí)行了update,delete,add等更改功能時(shí),沒(méi)有點(diǎn)擊commit或rollback功能,這就會(huì)導(dǎo)致某個(gè)數(shù)據(jù)表行被鎖,因此,為了防止數(shù)據(jù)庫(kù)表不被鎖,當(dāng)用戶沒(méi)有提交事務(wù)或回滾而退出瀏覽器時(shí),直接回滾沒(méi)有提交的事務(wù),即當(dāng)session失效時(shí),我們將所有的沒(méi)有commit或rollback的功能進(jìn)行回滾操作。
要完成對(duì)數(shù)據(jù)庫(kù)的管理,必定會(huì)面臨的幾個(gè)問(wèn)題,主要包括:如何獲取表字段名稱;如何獲取當(dāng)前schema下的表,視圖,存儲(chǔ)過(guò)程,函數(shù),包等;如何處理不同數(shù)據(jù)庫(kù)之間的差異。
在JDBC技術(shù)規(guī)范中,提供了Connection,Statement,ResultSet這三個(gè)開(kāi)發(fā)過(guò)程中常用的接口。針對(duì)每個(gè)接口,JDBC規(guī)范又提供了相應(yīng)的接口描述對(duì)象,也就是xxxMetaData描述對(duì)象。而在數(shù)據(jù)庫(kù)管理工具中,我們將會(huì)用到DatabaseMetaData和ResultSetMetaData,他們分別描述了數(shù)據(jù)庫(kù)的相關(guān)信息和結(jié)果集的相關(guān)信息。利用xxxMetaData描述對(duì)象,我們可以獲取到相應(yīng)的數(shù)據(jù)庫(kù)信息。但是由于不同的數(shù)據(jù)庫(kù)之間,還會(huì)存在差異,因此對(duì)于不同數(shù)據(jù)庫(kù)之間的特性,我們還需要通過(guò)查詢特定表來(lái)獲取相關(guān)的信息。
3.1 通過(guò)JDBC技術(shù)規(guī)范獲取數(shù)據(jù)庫(kù)信息
JDBC技術(shù)規(guī)范中提供了DatabaseMetaData類來(lái)訪問(wèn)數(shù)據(jù)庫(kù)信息。可通過(guò)如下代碼獲取到此類, 并且通過(guò)此類提供的方法獲取數(shù)據(jù)庫(kù)的相應(yīng)信息。
Connection con;
Con = DriverManager. getConnection ( url, username, password);
DatabaseMetaData dbmd=con.getMetaData ();
通過(guò)getTables方法獲取數(shù)據(jù)庫(kù)表名。此方法可返回結(jié)果集ResultSet,結(jié)果集中有5列,超出會(huì)報(bào)越界異常。
ResultSet DatabaseMetaData. getTables (String catalog, String schema, String tableName, String[ ] type)
通過(guò)getColumns方法獲取指定表的列信息。
ResultSet DatabaseMetaData getColumns (String catalog, String schema, String tableName, String columnName)
通過(guò)getPrimaryKeys得到指定表的主鍵信息:
ResultSet DatabaseMetaData getPrimaryKeys (String catalog, String schema, String tableName)
DatabaseMetaData類除了可以獲取以上所述的信息外,還可以獲取數(shù)據(jù)庫(kù)與用戶,數(shù)據(jù)庫(kù)標(biāo)識(shí)符以及函數(shù)與存儲(chǔ)過(guò)程;數(shù)據(jù)庫(kù)限制;架構(gòu)、編目、表、列和視圖等。
3.2 通過(guò)sql獲取數(shù)據(jù)庫(kù)的相應(yīng)信息
有些信息因?yàn)椴煌瑪?shù)據(jù)庫(kù)之間會(huì)存在著差異,因此對(duì)這些信息需要分開(kāi)處理,要獲取這些信息我們可以通過(guò)執(zhí)行sql的方式來(lái)獲取相應(yīng)的數(shù)據(jù)庫(kù)信息,下面將舉例說(shuō)明:
例1、獲取mysql和oracle的存儲(chǔ)過(guò)程
mysql:
"select routine_name from information_schema. routines
where routine_schema=? And routine_ type=’PROCEDURE’ order by 1 asc";
oracle:
final String sql="SELECT object_name, status, creater, last_ddl_time,timestamp"+
"FROM sys.all_objects where owner=?"+
"and object_type=’PROCEDURE’ order by 1 asc";
例2、獲取mysql和oracle的函數(shù)
mysql:
"select routine_name from information_schema. routines
where routine_schema=? And routine_type=’FUNCTION’order by 1 asc";
oracle:
final String sql="SELECT object_name, status, created, last_ddl_time,timestamp"+
"FROM sys.all_objects where owner=?"+
"and object_type=’ FUNCTION’ order by 1 asc";
4.1 整體架構(gòu)
我們引入了riversql[3]開(kāi)源工具,并在其基礎(chǔ)上了實(shí)現(xiàn)了基于web的數(shù)據(jù)庫(kù)管理工具。主要功能包括數(shù)據(jù)結(jié)構(gòu)(表,存儲(chǔ)過(guò)程,視圖,觸發(fā)器等)查看、數(shù)據(jù)導(dǎo)出(支持CSV/Excel、PDF格式)。技術(shù)框架模型如圖1所示:

圖1 技術(shù)框架模型
展現(xiàn)層:基于jsp+extJs開(kāi)發(fā),可兼容大多數(shù)瀏覽器。
服務(wù)層:服務(wù)層中,riversql簡(jiǎn)單實(shí)現(xiàn)了自己的mvc框架,并沒(méi)有使用其他另外一些開(kāi)源框架。實(shí)現(xiàn)的方式,主要是根據(jù)傳入的action字符串,然后實(shí)例化需要執(zhí)行的類,每一個(gè)實(shí)例化的類執(zhí)行每一個(gè)動(dòng)作,從而實(shí)現(xiàn)controller的功能。
數(shù)據(jù)層:用jdbc直接執(zhí)行sql。
4.2 基于riversql的二次開(kāi)發(fā)
我們?cè)趓iversql的基礎(chǔ)上進(jìn)行了二次開(kāi)發(fā),強(qiáng)化了整體功能,改善傳輸效率、中文支持等,以滿足我們當(dāng)前實(shí)際的需求。
由于riversql是由外國(guó)人開(kāi)發(fā)的一個(gè)工具,開(kāi)發(fā)者并沒(méi)有考慮到中文的問(wèn)題,加上不同的中間件編碼以及extjs對(duì)傳輸?shù)木幋a設(shè)置都不盡相同。為了減少這種不同環(huán)境的配置的麻煩,我們引入了Base64編碼。在導(dǎo)出數(shù)據(jù)時(shí),我們先對(duì)頁(yè)面數(shù)據(jù)進(jìn)行編碼,然后再傳到后臺(tái)進(jìn)行解碼導(dǎo)出文件。
由于原先是將所有的數(shù)據(jù)顯示在頁(yè)面上,不利于我們查看數(shù)據(jù),也對(duì)瀏覽器的js解釋能力帶來(lái)負(fù)擔(dān),當(dāng)一次顯示的數(shù)據(jù)量比較大的時(shí)候,瀏覽器的響應(yīng)速度會(huì)比較慢。因此,我們將原來(lái)的數(shù)據(jù)顯示方式,改為分頁(yè)方式查看。
此方案導(dǎo)出數(shù)據(jù)的方式,如圖2所示:

圖2 數(shù)據(jù)導(dǎo)出
①在頁(yè)面上輸入sql語(yǔ)句,傳到后臺(tái)進(jìn)行查詢。
②后臺(tái)將查詢到的數(shù)據(jù),以報(bào)表形式返回到頁(yè)面上顯示。
③將頁(yè)面上的所有報(bào)表數(shù)據(jù)傳回后臺(tái),后臺(tái)對(duì)頁(yè)面上所顯示的報(bào)表數(shù)據(jù)進(jìn)行處理,生成特定格式(例如csv,pdf,excel等格式)的字節(jié)流。
④返回生成后的報(bào)表文件,供用戶下載。
根據(jù)以上分析,網(wǎng)絡(luò)間的傳輸數(shù)據(jù)量是最終得到數(shù)據(jù)的2倍。因此,當(dāng)數(shù)據(jù)量較大時(shí),第③、④步將導(dǎo)致網(wǎng)絡(luò)開(kāi)銷升高。因此,我們結(jié)合分頁(yè)功能對(duì)導(dǎo)出數(shù)據(jù)進(jìn)行改進(jìn)。改進(jìn)后的導(dǎo)出功能分兩種情況:
1)導(dǎo)出當(dāng)前分頁(yè)頁(yè)面數(shù)據(jù)時(shí),用回原來(lái)的導(dǎo)出方式進(jìn)行導(dǎo)出結(jié)果。這樣避免了對(duì)數(shù)據(jù)庫(kù)頻繁的執(zhí)行sql。
2)導(dǎo)出全部查詢結(jié)果,將第③④步合為一步,即不再將頁(yè)面的數(shù)據(jù)往后臺(tái)傳輸,而是再查詢一次數(shù)據(jù)庫(kù),直接導(dǎo)出結(jié)果,而且導(dǎo)出的最大結(jié)果集為5000條。
隨著教育信息化的不斷推進(jìn),各教育單位對(duì)網(wǎng)絡(luò)安全的要求也會(huì)不斷提高,對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的安全管理也提出了更高的要求。網(wǎng)絡(luò)中心的管理人員應(yīng)對(duì)計(jì)算機(jī)的管理方式不斷探索與創(chuàng)新,制定出合理的應(yīng)對(duì)措施來(lái)面對(duì)日益嚴(yán)峻的網(wǎng)絡(luò)安全考驗(yàn)。
[1] 計(jì)算機(jī)數(shù)據(jù)庫(kù)安全管理探析[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2013.10
[2] 基于JDBC的數(shù)據(jù)庫(kù)連接池的煤礦安全監(jiān)控技術(shù)體系建設(shè)[J].煤炭技術(shù),2013.7
[3] http://m.blog.csdn.net/blog/alen1985/41356361
Database management scheme based on Web and riversql
Ma Jianming,Ni Mandi
(Hunan Vocational College of Commerce,Changsha,Hunan,410205)
For security reasons, the server where the segment and the office computer network segment where the isolation of,but for the application system of data import and export operation inconvenience.In this paper,based on riversql,a database management scheme based on web is proposed,which is used to manage all kinds of databases.
database management;riversql