通过Java动态创建ODBC数据源来访问DBF文件

通过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,使用方法也很简单,网上有很多资料,可以查询。也就不多说了。

时间: 2024-11-01 02:36:02

通过Java动态创建ODBC数据源来访问DBF文件的相关文章

C++ Builder动态设定odbc数据源

本文以access为例 需要文件 odbcinst.h(bcb或vc的include目录) odbccp32.dll(winnt\system32\目录) implib.exe(通过dll生成lib库) coff2omf.exe (将coff库转化为omf库) 首先将上面文件拷贝到工程目录,执行下面命令: implib.exe odbccp32.lib odbccp32.dll coff2omf odbccp32.lib 下面程序的功能为当应用程序启动时,动态添加/修改一个指向当前目录的,名为t

在DELPHI程序中动态设置ODBC数据源

在DELPHI数据库应用程序中,我们访问数据库通常有两种方法.一种是通过BDE数据库搜索引擎,即利用DELPHI自带的数据库驱动程序,这种方法的优点是速度快,但应用范围有限,当数据库版本更新时,有可能不能用于操作新的数据库:另一种方法是通过ODBC,这种方法的优点是可以随操作系统(如WINDOWS)提供,作为标准接口能适应多种数据库,缺点是速度慢.在编程时,我们可以根据需要选择其中的一种方法. 在利用ODBC访问数据库时,通常的方法时是在ODBC管理面板中设置一个ODBC系统数据源 (系统DSN

C# 多线程动态创建控件并访问由该线程创建的控件

问题描述 RT我在一个线程里面操作文件,有几个文件就创建几个线程.我想在UI上动态的创建几个进度条控件.怎么做?想了半天想不到啥...窝是菜鸟!求各路大神指点一二 解决方案 解决方案二:所有控件都只能有主线程创建,如果使用后台线程创建,时不时会有异常跳出.解决方案三:我用主线程创建,然后根据一定的规律来命名这些控件,然后在另外一个线程里面把处理好的数据和要使用的控件名用委托传回来,然后再在主线程里面找到这个控件并把数据添加到控件里面你觉得这样可以嘛?解决方案四:引用1楼CGabriel的回复:

rails的migrate如何动态创建字段?

问题描述 有一个表是这种结构,user_id,item_1,item_2,item_3,....item_180想问问使用rails的migrate进行定义的时候,有没有比较简单的动态创建办法?尝试了这种写法:count=1 until count>181 do t.integer :item_'+count.to_s count = count+1 end运行的时候,报错,意思是,undefined method `+' 目前找到的一种比较笨的方法是,将这种动态创建字段的语句放到migrate

在VB6中动态创建使用ADO控件访问数据库

ado|创建|动态|访问|控件|数据|数据库 使用ADO控件可以方便的在VB6中访问ODBC数据库,但是通过直接放置ADODS控件来获得ADO的数据连接比较麻烦,我们可以在VB工程中创建一个公共数据模块,将ADO控件的初始化.建立连接.关闭连接等操作都写到函数中,这样就可以在工程的其他模块中共享调用这个ADO连接. 一次完整的ADO调用操作分为如下几个步骤: 打开ADO到数据库的连接,初始化ADO RECORDSET集. 通过写入SQL语句执行查询并返回查询结果RECORDSET集:或者可以通过

动态创建script标签实现跨域资源访问的方法介绍

 本篇文章主要是对动态创建script标签实现跨域资源访问的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 login.html  代码如下: <script>   function request(id,url){      oScript = document.getElementById(id);      var head = document.getElementsByTagName("head").item(0);      if (oScript

ajaxFileUpload 动态创建iframe 但是访问报没有权限是什么原因

问题描述 ajaxFileUpload 动态创建iframe 但是访问报没有权限是什么原因 var xml = {}; if (s.global) jQuery.event.trigger(""ajaxSend"" [xml s]); //触发ajaxSend方法 // Wait for a response to come back var uploadCallback = function (isTimeout) {//回调函数 **** var io = do

请问C#如何创建访问集合元素的表达式?是用linq动态创建的。

问题描述 如何创建访问集合元素的表达式?是用linq动态创建的.比如Expression.Constant(3);可以创建一个常量3,用Expression.ArrayAccess可以访问数组元素.但对于集合的元素如何访问呢?比如DataTable.Rows["element1"]=1;这样的表达式该如何创建呢,谢谢 解决方案 解决方案二:用Expression.MakeIndex解决方案三:引用1楼caozhy的回复: 用Expression.MakeIndex 你好,能不能举个例子

64系统下如何代码实现创建32位的odbc数据源

问题描述 64系统下如何代码实现创建32位的odbc数据源?stringSQLSRV32dll=@"C:WINDOWSsystem32SQLSRV32.dll";boolis64Bit;is64Bit=Environment.Is64BitOperatingSystem;if(is64Bit)//64位的机器{SQLSRV32dll=@"C:WINDOWSSysWOW64SQLSRV32.dll";}RegistryKeyregKey=Registry.LocalM