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