java解析dbf格式时里面数据类型怎么判断

 我来答
从空去听8
2017-12-31 · TA获得超过7440个赞
知道大有可为答主
回答量:6907
采纳率:93%
帮助的人:5598万
展开全部

使用JDBC-ODBC桥接方式读取Access文件,使用Acces
与DBF都需要配置桥接模式,在控制面板里,选择管理工具里配置


核心代码如下,

Java代码  

  • try {  

  • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  

  • con = DriverManager.getConnection("jdbc:odbc:ss",  bulidPath, "");//加载驱动,默认密码,空字符串即可  

  • //System.out.println("Access连接:"+con);  

  • } catch (Exception e) {  

  • e.printStackTrace();  

  • }  



  • Java代码  

  • AccessBase ab=new AccessBase();  

  • Connection con=ab.getConnection("zdbz.mdb");  

  • String sql="select * from test";//查询表  

  • PreparedStatement ps=con.prepareStatement(sql);  

  • ResultSet rs=ps.executeQuery();  

  • //ResultSetMetaData s=rs.getMetaData();  

  • // int i=s.getColumnCount();  

  • //System.out.println(i);  

  • List<ExcelEntity> list=new ArrayList<ExcelEntity>();  

  • while(rs.next()){  

  • ExcelEntity xml=new ExcelEntity();  

  • xml.setUi(rs.getString(1));  

  • xml.setTi(rs.getString(2));  

  • xml.setTa(rs.getString(3));  

  • xml.setDp(rs.getString(4));  

  • xml.setVi(rs.getString(5));  

  • xml.setIp(rs.getString(6));  

  • xml.setPg(rs.getString(7));  

  • xml.setAb(rs.getString(8));  

  • xml.setKw(rs.getString(9));  

  • xml.setMh(rs.getString(10));  

  • list.add(xml);  

  • }  

  • DAO.addAccess(list);  

  • // System.out.println(i);  

  • rs.close();  

  • ps.close();  

  • con.close();  



  • 4,最后在来说一下,比较纠结的DBF的解析,关于这个东西,散仙以前也没用过,现在客户有这种需求,自然得做好,于是乎Google了一把,效果似乎还不错,第一页上基本全是有关于,JAVA解析DBF格式的,当时我还在想,得来全不费工夫,于是,找了一篇,看起来似乎挺靠谱的解析博客,拷贝了其中的代码,拿过来使用,结果报了各种异常,这种方式是用流读取的,然后直接解析流,提取每一行数据,还附带一个jar包,散仙后面会把jar给传上来,我们先看下这种方式的代码:

    Java代码  

  • package com.dbhelper;  

  • import java.io.FileInputStream;  

  • import java.io.InputStream;  

  • import com.hexiong.jdbf.DBFReader;  

  • public class ParseDBF {  

  • public static void main(String[] args) {  

  • readDBF("C:\\Users\\cuichao\\Desktop\\zdbz\\test.DBF");  

  • }  

  • public static void readDBF(String path)  

  • {  

  • InputStream fis = null;  

  • try  

  • {  

  • // 读取文件的输入流  

  • fis = new FileInputStream(path);  

  • // 根据输入流初始化一个DBFReader实例,用来读取DBF文件信息  

  • DBFReader reader = new DBFReader(fis);  

  • //DBFReader reader=new DBFReader("C:\\Users\\cuichao\\Desktop\\zdbz\\test.DBF");  

  • // System.out.println(reader);  

  • // 调用DBFReader对实例方法得到path文件中字段的个数  

  • int fieldsCount = reader.getFieldCount();  

  • System.out.println(fieldsCount);  

  • Object[] s= reader.nextRecord();  

  • while(reader.nextRecord()!=null&&reader.nextRecord().length>0){  

  • for(int i=0;i<reader.nextRecord().length;i++){  

  • System.out.println(reader.nextRecord()[i]);  

  • }  

  • }  

  • }  

  • catch (Exception e)  

  • {  

  • e.printStackTrace();  

  • }  

  • finally  

  • {  

  • try {  

  • //  fis.close();  

  • } catch (Exception e) {  

  • }  

  • }  

  • }  

  • }  



  • 这种流读取的方式,散仙也看了下源码,代码比较繁琐,而且有好多限制不能用,比如说,读取某列的字符长度不能大于8,或者包含某个C或D的字符的不能用,等等。散仙,猜想这个发博客的人,是根据自己的业务定义的,这也不能怪人家,各个业务的需求都不一样,难免会出现这种情况。 下面,我们来看看,最王道,最通用的解析方法, 既然,它是数据库,那么我们为什么不按数据库的方式来搞呢? 用流读取的方式,不通用,而且异常百出,按数据库的方式,解决,才是最完美的方法。

    首先配置好的桥接,截图如下




    核心代码如下

    Java代码  

  • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载驱动  

  • try {  

  • //conn = DriverManager.getConnection(DB_URL);  

  • conn = DriverManager.getConnection("jdbc:odbc:ss","test.dbf","");//无密码则空字符串  

  • pstm = conn.prepareStatement("select * from test"); // 此处的XXB 为DBF数据文件的名字  

  • rs = pstm.executeQuery();  



  • 至此,完美解决DBF数据库文件读取。网上的东西,太杂了,所以,我们要理智判断,取其精华,去其糟粕,为我所用。

    终于被我找到了!
    完全free的: com/ 这个网站主要是做数据库连接中间介的,其中用到了一个他们自己开发的叫做JDBF的项目,该项目就是专门控制dbf文件的,整个包只有30K大小,你们随便用个工具反编译一下就可以看懂里面的代码,很简单,就是按照具体格式处理文件!(注意,不是使用JDBC连接的。)
    不过我试了一下,发现只支持三中格式的:foxpro2.x、DBase IV、DBase III。 
    大家用得着的话可以去那里下载! 有问题的话可以再来问我。

    我发现国外的这类开源网站很多,国内的就少得可怜了!唉!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式