xhchc

          危波帆墻,笑談只在桃花上;與誰共尚,風吹萬里浪; 相依相偎,不做黃泉想;莫惆悵,碧波潮生,一蕭自狂放……

           

          通過java動態創建ODBC數據源來訪問DBF文件(轉)

           

          【賽迪網-IT技術報道】好久沒有使用過VFP了,記憶中似乎也只是在學校中使用過。這次出差,客戶給了一大堆dbf文件,要求處理。

          無奈啊,顧客就是上帝。雖然可以通過許多途徑來處理,但是總想用java語言來處理。最終還是需要通過JNI來處理,不過用到了一個開元的操作注冊表的registry-3.1.3,使用后,發現蠻簡單的,網上已有很多資料介紹,就不多說了。

          想了兩種解決方法,第一種比較麻煩,但是看網上很多人問,就也總結了出來,其實就是通過java動態創建ODBC數據源來訪問DBF文件,這個就需要用到registry,來修改注冊表了。

          其實,主要是動態創建ODBC數據源,開始很簡單,可以手工設置一次數據源,當然也可以通過程序直接生成,問題都不大。下面只說怎樣修改。

          import com.ice.jni.registry.RegStringValue;
                      import com.ice.jni.registry.Registry;
                      import com.ice.jni.registry.RegistryKey;

          public class TestC {
                      public static void main(String[] str) {
                      try {
                      RegistryKey child = Registry.HKEY_CURRENT_USER
                      .openSubKey("Software").openSubKey("ODBC").openSubKey
                      ("ODBC.INI").openSubKey("data_0930",RegistryKey.ACCESS_ALL);//
                      操作權限是通過RegistryKey來獲取的。
                      String de = "F:\\commony\\test\\data\\070901";  //
                      我的DBF數據的目錄//其中,data_0930是我第一次設置的數據源的一個注冊表的名稱
                      System.out.println(child.getStringValue("SourceDB"));
                      child.setValue(new RegStringValue(child,"SourceDB",de));
                      System.out.println(child.getFullName());
                      } catch (Exception e) {
                      e.printStackTrace();
                      }
                      }
                      }

          然后就是通過,sun.jdbc.odbc.JdbcOdbcDriver來獲取數據,

          import java.sql.DriverManager;
                      import java.sql.*;
                      public class TestOdbc {
                      public TestOdbc() {
                      }
                      public static void main(String[] args) {
                      java.sql.Connection conn = null;
                      java.sql.PreparedStatement pt = null;
                      java.sql.ResultSet rs = null;
                      try {
                      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                      }
                      catch (ClassNotFoundException ex1) {
                      }
                      try {
                      conn = DriverManager.getConnection("jdbc:odbc:data_0930", "", "");
                      pt = conn.prepareStatement(" select *  from test_table");
                      rs = pt.executeQuery();
                      while(rs.next()){
                      System.out.println("==="+rs.getString(1));
                      System.out.println("==="+rs.getString(2));
                      System.out.println("==="+rs.getString(3));
                      System.out.println("==="+rs.getString(4));
                      System.out.println("==="+rs.getString(5));
                      }
                      }
                      catch (SQLException ex) {
                      }
                      }
                      }

          其實真的很簡單。

          其實,文件名,是可以動態獲取的,一般可以通過java中的File類來獲取:

          import java.io.File;
                      public class TestD {
                      public static void main(String[] args){
                      File file = new File("F:\\commony\\test\\data");
                      File[] df = file.listFiles();
                      for(int k =0;k   if(df[k].isDirectory()){ //
                      因為文件夾中包含DBF文件,所以判斷是文件夾,而不是文件
                      System.out.println("===kkkk=="+k+"====="+df[k].getName());
                      }
                      }
                      }
                      }

          第一種就是這樣,需要注意的是registry的使用,其實很簡單的,只要把DLL文件放到classpath下就可以了。

          第二種其實更簡單,就是通過另一個開元的類包jdbf.jar,使用方法也很簡單,網上有很多資料,可以查詢。也就不多說了。

          posted on 2009-01-08 14:16 chu 閱讀(171) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆檔案

          我的鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 隆子县| 灵山县| 平乐县| 滨州市| 雷波县| 新昌县| 英山县| 浦江县| 阳城县| 清涧县| 桂林市| 贵港市| 柘城县| 灵丘县| 张家口市| 西青区| 卢龙县| 宕昌县| 涡阳县| 万安县| 林甸县| 湖州市| 荃湾区| 大悟县| 称多县| 威海市| 林甸县| 闽侯县| 玛曲县| 基隆市| 左云县| 河曲县| 滨州市| 颍上县| 吴川市| 南靖县| 拜泉县| 襄汾县| 伊吾县| 白银市| 杭锦旗|