【赛迪网-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.getstrin
扫描关注微信公众号
|