JAVA:DBF文件读取与写入操作(使用dbf-jdbc)

问题

之前介绍了使用javadbf工具包读写dbf的方法,基本可以实现大多数读写dbf的应用场景。

但如果你生成的dbf文件包含了特殊字段,比如下图的字段“_NULLFLAGS”,字段类型是Bytes,此类型在javadbf工具包中是不支持的。

当你使用javadbf来写入该文件时,是无法用bytes类型写入该字段值或无法在新增记录行保留原bytes类型,这将可能导致你的硬件设备比如抄表机等无法正确识别读取该文件。

解决方案

使用dbf-jdbc-wisecoders工具包。

使用工具包前,需要先在项目中导入dbschema-dbf-jdbc1.0.jar包,同时还有另外两个包h2-2.1.212.jar、javadbf-1.13.2.jar也一并导入。

dbf-jdbc-wisecoders工具类下载地址

以下为使用示例代码

    public void writeDbfZZD2() {
        try {
            //引入类,该类需要在工程中导入包 dbschema-dbf-jdbc1.0.jar
            Class.forName("com.wisecoders.dbschema.dbf.JdbcDriver");
            //dbf原文件所在目录,后面的?charset=GBK是避免中文乱码
            String url = "jdbc:dbschema:dbf:/D:/mywork/myWorkSpace/dbf?charset=GBK";
            Connection con = DriverManager.getConnection(url, "", "");
            //新增记录行
            String sql = "insert into A(HM, SBBH, DZ, CCBH, DH,XH,YE) values (?, ?, ?, ?, ?, ?, ?)";
            PreparedStatement stmt = con.prepareStatement(sql);
            stmt.setMaxRows(500);
            stmt.setFetchSize(20);
            stmt.setString(1, new Time(new Date().getTime()).toString());
            stmt.setString(2, "test2022-09-01");
            stmt.setString(3, "test2022-09-02");
            stmt.setString(4, "test2022-09-03");
            stmt.setString(5, "test");
            stmt.setInt(6, 0);
            stmt.setInt(7, 300);
            stmt.execute();//执行sql语句
            stmt.close();

            Statement st = con.createStatement();
             //保存文件 此步骤执行后,数据才会保存到dbf文件中
            st.execute("save dbf to D:/mywork/myWorkSpace/dbf");
            st.close();
            con.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

执行以上方法后,指定目录下的dbf文件A.dbf会新增一条新数据,若原文件包含bytes字段,也会自动保留此类型。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值