鷹翔宇空

          學習和生活

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
          好久沒有使用過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<df.length;k++){
             if(df[k].isDirectory()){ //因為文件夾中包含DBF文件,所以判斷是文件夾,而不是文件
              System.out.println("===kkkk=="+k+"====="+df[k].getName());
             }
            }
           }
          }

          第一種就是這樣,需要注意的是registry的使用,其實很簡單的,只要把DLL文件放到classpath下就可以了。
          第二種其實更簡單,就是通過另一個開元的類包jdbf.jar,使用方法也很簡單,網上有很多資料,可以查詢。也就不多說了。
           

          posted on 2007-09-30 16:38 TrampEagle 閱讀(3161) 評論(4)  編輯  收藏 所屬分類: 學習體會

          Feedback

          # re: 如何使用java動態創建ODBC數據源 2007-09-30 16:44 BeanSoft
          Access 是通過 ODBC 連接的. Excel 也可以. 甚至可以動態構造連接字符串:

          這樣可以直接連接到 Access 數據庫文件.

          jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\mydata.mdb

          類似的 Excel 文件也可以用類似方法:

          jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=.\mydata.xls

          DBF 應該也可以這樣來做.  回復  更多評論
            

          # re: 如何使用java動態創建ODBC數據源 2007-09-30 16:59 TrampEagle
          @BeanSoft
          呵呵,謝謝熱心的BeanSoft,發現BeanSoft很活躍的,呵呵。
          DBF操作時,有很多版本不一致的情況,所以有的是可以的,但并不是所有版本的DBF都可以這樣操作,我試過一些,但是也不想深入研究。  回復  更多評論
            

          # re: 如何使用java動態創建ODBC數據源 2007-09-30 17:09 Unmi
          看 純Java程序讀取DBF文件型數據庫 http://www.aygfsteel.com/Unmi/archive/2006/03/04/124078.html

          用xBaseJ用jdbc的方式處理dbf文件比較方便,可用sql語句,jdbf.jar更像是在處理文件的讀取

          ODBC基本被現代的數據庫程序所摒棄,因為想做成很通用,所以必然性能會差很多的  回復  更多評論
            

          # re: 如何使用java動態創建ODBC數據源 2007-09-30 17:14 Unmi
          關于Registry的使用,我也寫過一篇 在 Java 中操作 Windows 注冊表
          http://www.aygfsteel.com/Unmi/archive/2007/09/02/142138.html  回復  更多評論
            

          主站蜘蛛池模板: 固原市| 临城县| 克拉玛依市| 溆浦县| 承德县| 准格尔旗| 铜鼓县| 南雄市| 黄石市| 沾化县| 海安县| 班戈县| 阜阳市| 唐海县| 濮阳县| 区。| 平阳县| 中西区| 丽水市| 资源县| 三江| 博罗县| 久治县| 庆安县| 井研县| 河北省| 武夷山市| 湖口县| 衡阳市| 林周县| 任丘市| 唐海县| 嘉义县| 陕西省| 思茅市| 平江县| 三明市| 宕昌县| 重庆市| 宜宾县| 繁昌县|