问题
之前介绍了使用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字段,也会自动保留此类型。










