使用hsqldb將常用數據庫整合到應用程序中
提到過一些常用數據庫,可以視作固定編碼的數據庫。對於這些書庫,通常只進行查詢使用。
因此針對一些比如用戶希望只傳入ip地址就要查詢到用戶信息,或者只傳入行政區劃編號,
就可以得到行政區劃名字等等需求。而且用戶不希望去配置數據庫信息等等,
Access文件雖然比較方便,卻不具有跨平臺的效果,因此可以藉助開源免費的hsql來進行在應用小型數據庫的嵌入。
尤其是在1.7.2版本加入了新的特性,可以支持在jar裏直接以只讀方式訪問數據庫。
因此,把封裝好的class和數據文件一併打包,可以非常方便的給別人使用。
以下是操作過程,
首先下載hsql,最新的穩定版本是1.7.3.3:
下載ip數據庫:
然後利用自帶工具將其數據解壓導出爲文本文件
,用Editplus打開,替換掉 CZ88.NET,以減少文件佔用空間,(使用正則表達式進行替換,將數據規整。
用xmlspy進行轉換成xml再導入access,(這一步完全可以省略掉)),然後直接用access導入這195074條記錄。
然後是從Access裏導入數據
比如我的常用數據有ip地址信息表,行政區劃和省份信表:
//創建表
connto.createStatement().execute("CREATE TABLE PROVINCE(PDOMAIN VARCHAR(3),PLABEL VARCHAR(50),PNAME VARCHAR(6),PNO VARCHAR(3),PSHORTNAME VARCHAR(2))");
connto.createStatement().execute(
"CREATE TABLE XZQH(NAME VARCHAR(30),CODE VARCHAR(6),O_CODE VARCHAR(8))");
connto.createStatement().execute(
"CREATE TABLE IPINFO(IPS BIGINT,IPE BIGINT,AREA VARCHAR(60))");
ResultSet rs = stmtin.executeQuery("SELECT * FROM province");
PreparedStatement pstmt = connto.prepareStatement(
"insert into province (pdomain,plabel,pname,pno,pshortname) values(?,?,?,?,?)");
導入完成之後,將數據文件添加到jar文件中,再封裝好常用方法。
就可以了,以後的數據維護也非常簡單,只要不修改表結果,只需要把數據文件更新即可,不需要修改任何代碼。
調用方法示例 :
先引入這個jar文件,然後使用下面的方法調用,
String area=com.lizongbo.database.SearchUtil.findAreabyIp("192.168.9.1");
使用者不需要關心任何其它的東西,一行代碼就得到想要的結果了。
不過需要注意的是,使用了ip數據庫之後,因爲ip數據庫記錄量很大,生成的scrpit文件比較大,我的文件有22M,
打包壓縮後的jar,也有 3M大小,初始化數據庫的時候會非常緩慢。
綜合考慮, 犧牲空間和一部分內存來換取應用程序的可複用和跨平臺以及數據記錄可維護性,還是比較值得的。
抓圖:
參考:
http://hsqldb.sourceforge.net