純Java程序讀取DBF文件型數(shù)據(jù)庫(kù) |
還記得那個(gè)古老的Foxbase和Foxpro產(chǎn)生的數(shù)據(jù)庫(kù)嗎?與access(MDB)類似的文件型數(shù)據(jù)庫(kù),可是有些地方有人還在用它。DBF數(shù)據(jù)庫(kù)一般都是在Foxbase或Foxpro中或由它們生成的應(yīng)用程序來(lái)訪問(wèn),也可以通過(guò)建立ODBC的方式來(lái)訪問(wèn)。 Java要訪問(wèn)什么數(shù)據(jù)庫(kù)第一個(gè)念頭就會(huì)是有沒(méi)有相應(yīng)的驅(qū)動(dòng)啊,有驅(qū)動(dòng)那好辦,若是沒(méi)有驅(qū)動(dòng)那能不能通過(guò)配置ODBC,用JDBC-ODBC橋來(lái)訪問(wèn)呢?當(dāng)然Java訪問(wèn)DBF文件是可以通過(guò)JDBC-ODBC的方式,但這樣的話是不是純Java實(shí)現(xiàn)還說(shuō),倒是得為要訪問(wèn)的DBF文件建一個(gè)數(shù)據(jù)源麻煩,尤其是程序移植時(shí)。 還好有一個(gè)訪問(wèn)DBF文件的JDBC驅(qū)動(dòng)可以用,那就是xBaseJ,當(dāng)前版本是v2.1 (試用版下載地址http://www.americancoders.com,已解除時(shí)間限制包可從 http://www.blogjava.net/Files/Unmi/xdbfj21F(CrackedByUnmi).zip 下載)。xBaseJ是一個(gè)Java寫(xiě)成的dBase數(shù)據(jù)庫(kù)引擎,支持dBase III、IV DBF、DBT、NDX、MDX和FPT文件,還有獨(dú)立的C/S結(jié)構(gòu)類,用于開(kāi)發(fā)Java程序。不過(guò)這東西還真貴,注冊(cè)費(fèi)用是$95,是美元啦! 先可以體驗(yàn)一下xBaseJ的簡(jiǎn)單應(yīng)用,運(yùn)行自帶的例子程序。解壓下載過(guò)來(lái)的xdbfj21F.zip文件,把其中的xBaseJ.jar加到classpath下,最好在IDE里用。然后可以運(yùn)行自帶的createDBFS.java程序,它會(huì)在當(dāng)前目錄創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)文件DBFs.DBF,再執(zhí)行testread.java,需要傳入?yún)?shù)DBFs.DBF,就是剛剛生成的數(shù)據(jù)庫(kù)文件名,控制臺(tái)下可以看到輸出createDBFS程序插入的數(shù)據(jù)記錄。 但同時(shí)你也會(huì)看到試用版的xBaseJ會(huì)在控制臺(tái)下打印出過(guò)期時(shí)間(如Package Expires: 2006-04-01 Package Will Expire ),但倘若我寫(xiě)的不控制臺(tái)程序,過(guò)期信息它也找不著去哪兒打印出來(lái)。并且同一進(jìn)程打開(kāi)的文件數(shù)不能超過(guò)5個(gè)。 不過(guò)在Java包中這種限制相信都難不倒多少人,Java的字節(jié)碼可是能被反編譯的,下面告訴各位一下如果不讓xBaseJ過(guò)期,也不輸出過(guò)期,并且去除打開(kāi)文件數(shù)量的限制。 先找著是在哪行代碼執(zhí)行后出現(xiàn)過(guò)期信息的,在testread.java源代碼中設(shè)個(gè)斷點(diǎn),就在第一次介入xBaseJ的代碼行處,aDBF = new DBF(arg[0]);。調(diào)試時(shí)你可以看到就是執(zhí)行new DBF(arg[0])后打印出過(guò)期信息的。用工具(如Java源代碼反編譯專家)反編譯出DBF.class文件,看構(gòu)造函數(shù)DBF(String s)就可以追溯到是private void A600000(String s)方法中打印出來(lái)的信息,并對(duì)打開(kāi)文件數(shù)作的限制。其實(shí)打開(kāi)的源文件,只要查到一下輸出信息,比如“Package Expired”就能直接找到在哪里輸出的。 找到了在哪里就好辦了,把約束給解除掉啊,注釋掉你不想要的東西,例如,把下面兩塊代碼注釋掉就行了 第一塊是:去除時(shí)間限制,不打印提示信息 Calendar calendar = Calendar.getInstance(); 第二塊是:去除同一進(jìn)程打開(kāi)文件數(shù)量限制 results++; 編譯這個(gè)DBF類,把生成的DBF.class替換掉原來(lái)xBaseJ.jar包中的該文件就行了,就這么簡(jiǎn)單。如果大家對(duì)這種方式侵權(quán)無(wú)太多的顧慮的話就可以這樣用它。 大家反編譯xBaseJ的字節(jié)碼是也會(huì)注意到,他們發(fā)布的時(shí)候還有意把類、方法、變量命名給混淆了一下,但這絲毫不會(huì)影響作這種簡(jiǎn)單的Crack。 對(duì)xBaseJ使用上更多的介紹可以參數(shù)下載的xdbfj21F.zip中幫助文檔,或運(yùn)行一下所帶的其他例子程序,參看網(wǎng)站http://www.americancoders.com/xBaseJ2.1/index.html可以獲取到更多的信息。 例如:提供了SWING圖形界面創(chuàng)建DBF文件,瀏覽、增、刪、改DBF文件中的記錄,還允許通過(guò)RMI的方式遠(yuǎn)程訪問(wèn)DBF文件。還有更多的附加支持包可供下載。 DBF Beans http://www.americancoders.com/xBaseJ2.1/makeDBFbean.zip 簡(jiǎn)化你的代碼讀取DBF文件和創(chuàng)建Javabean |
聯(lián)系客服