倪曼蒂,馬建明
(湖南商務職業技術學院 湖南長沙,410205)
基于web及riversql的數據庫管理方案
倪曼蒂,馬建明
(湖南商務職業技術學院 湖南長沙,410205)
出于安全考慮,將服務器所在網段與辦公電腦所在網段進行隔離,卻為應用系統的數據導入、導出等操作帶來不便。本文在riversql的基礎上,提出了一種基于web的數據庫管理方案,用于對各系統各類型數據庫的綜合管理。
數據庫管理;riversql
隨著一年一度高招工作的臨近,高等院校網絡安全面臨新一輪考驗,其中一種常見方式為通過職工的機器間接地獲取信息。為了防止黑客再次通過這樣的手段攻擊服務器,可將服務器所在的網段與職工電腦所在的網段進行隔離,以防止不法份子攻擊服務器,破壞或盜取相關的資料信息。而實際情況下,這樣的措施雖然提高了服務器的安全性和可靠性,卻為網絡中心的日常數據運維帶來了不便,包括數據導入、導出,報表生成等。因此,我們希望能開發一個工具來解決當前的問題。
目前我院系統使用的數據庫包括mysql及ms sqlserver這兩種常用數據庫,考慮到未來發展,這個數據庫管理工具需要支持mysql、ms sqlserver以及oracle等幾種常用的數據庫的基本操作,滿足對數據表的增、刪、查、改功能,并且對查詢結果進行導出。另外,因為使用者可能存在使用不當的情況,例如當執行了update,delete,add等更改功能時,沒有點擊commit或rollback功能,這就會導致某個數據表行被鎖,因此,為了防止數據庫表不被鎖,當用戶沒有提交事務或回滾而退出瀏覽器時,直接回滾沒有提交的事務,即當session失效時,我們將所有的沒有commit或rollback的功能進行回滾操作。
要完成對數據庫的管理,必定會面臨的幾個問題,主要包括:如何獲取表字段名稱;如何獲取當前schema下的表,視圖,存儲過程,函數,包等;如何處理不同數據庫之間的差異。
在JDBC技術規范中,提供了Connection,Statement,ResultSet這三個開發過程中常用的接口。針對每個接口,JDBC規范又提供了相應的接口描述對象,也就是xxxMetaData描述對象。而在數據庫管理工具中,我們將會用到DatabaseMetaData和ResultSetMetaData,他們分別描述了數據庫的相關信息和結果集的相關信息。利用xxxMetaData描述對象,我們可以獲取到相應的數據庫信息。但是由于不同的數據庫之間,還會存在差異,因此對于不同數據庫之間的特性,我們還需要通過查詢特定表來獲取相關的信息。
3.1 通過JDBC技術規范獲取數據庫信息
JDBC技術規范中提供了DatabaseMetaData類來訪問數據庫信息。可通過如下代碼獲取到此類, 并且通過此類提供的方法獲取數據庫的相應信息。
Connection con;
Con = DriverManager. getConnection ( url, username, password);
DatabaseMetaData dbmd=con.getMetaData ();
通過getTables方法獲取數據庫表名。此方法可返回結果集ResultSet,結果集中有5列,超出會報越界異常。
ResultSet DatabaseMetaData. getTables (String catalog, String schema, String tableName, String[ ] type)
通過getColumns方法獲取指定表的列信息。
ResultSet DatabaseMetaData getColumns (String catalog, String schema, String tableName, String columnName)
通過getPrimaryKeys得到指定表的主鍵信息:
ResultSet DatabaseMetaData getPrimaryKeys (String catalog, String schema, String tableName)
DatabaseMetaData類除了可以獲取以上所述的信息外,還可以獲取數據庫與用戶,數據庫標識符以及函數與存儲過程;數據庫限制;架構、編目、表、列和視圖等。
3.2 通過sql獲取數據庫的相應信息
有些信息因為不同數據庫之間會存在著差異,因此對這些信息需要分開處理,要獲取這些信息我們可以通過執行sql的方式來獲取相應的數據庫信息,下面將舉例說明:
例1、獲取mysql和oracle的存儲過程
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的函數
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 整體架構
我們引入了riversql[3]開源工具,并在其基礎上了實現了基于web的數據庫管理工具。主要功能包括數據結構(表,存儲過程,視圖,觸發器等)查看、數據導出(支持CSV/Excel、PDF格式)。技術框架模型如圖1所示:

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

圖2 數據導出
①在頁面上輸入sql語句,傳到后臺進行查詢。
②后臺將查詢到的數據,以報表形式返回到頁面上顯示。
③將頁面上的所有報表數據傳回后臺,后臺對頁面上所顯示的報表數據進行處理,生成特定格式(例如csv,pdf,excel等格式)的字節流。
④返回生成后的報表文件,供用戶下載。
根據以上分析,網絡間的傳輸數據量是最終得到數據的2倍。因此,當數據量較大時,第③、④步將導致網絡開銷升高。因此,我們結合分頁功能對導出數據進行改進。改進后的導出功能分兩種情況:
1)導出當前分頁頁面數據時,用回原來的導出方式進行導出結果。這樣避免了對數據庫頻繁的執行sql。
2)導出全部查詢結果,將第③④步合為一步,即不再將頁面的數據往后臺傳輸,而是再查詢一次數據庫,直接導出結果,而且導出的最大結果集為5000條。
隨著教育信息化的不斷推進,各教育單位對網絡安全的要求也會不斷提高,對數據庫系統的安全管理也提出了更高的要求。網絡中心的管理人員應對計算機的管理方式不斷探索與創新,制定出合理的應對措施來面對日益嚴峻的網絡安全考驗。
[1] 計算機數據庫安全管理探析[J].網絡安全技術與應用,2013.10
[2] 基于JDBC的數據庫連接池的煤礦安全監控技術體系建設[J].煤炭技術,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