1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      通過java動態(tài)創(chuàng)建ODBC數(shù)據(jù)源來訪問DBF文件

      更新時間: 2008-08-29 10:37:25來源: 粵嵌教育瀏覽量:1293

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

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

        想了兩種解決方法,種比較麻煩,但是看網(wǎng)上很多人問,就也總結(jié)了出來,其實就是通過java動態(tài)創(chuàng)建ODBC數(shù)據(jù)源來訪問DBF文件,這個就需要用到registry,來修改注冊表了。

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

      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);//
                  操作權(quán)限是通過RegistryKey來獲取的。
                  String de = "F:\\commony\\test\\data\\070901";  //
                  我的DBF數(shù)據(jù)的目錄//其中,data_0930是我次設(shè)置的數(shù)據(jù)源的一個注冊表的名稱
                  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來獲取數(shù)據(jù)

      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) {
                  }
                  }
                  }



        其實真的很簡單。

        其實,文件名,是可以動態(tài)獲取的,一般可以通過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,使用方法也很簡單,網(wǎng)上有很多資料,可以查詢。也就不多說了。



      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲国产精品另类 | 中文字幕高潮波多野结衣 | 色妞在线视频网址免费观看国产片 | 日韩国产精品免费人成视频 | 午夜福利久久野草 | 日本韩欧色色色色色色 |