锁定老帖子 主题:用JavaDBF操作(读、写)DBF文件
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-27
用JavaDBF操作(读、写)DBF文件<o:p></o:p> 最近的一个项目需要动态生成DBF文件,用到JavaDBF,简单介绍一下<o:p></o:p> 官方网站:http://javadbf.sarovar.org/<o:p></o:p> 官方英文指南:http://sarovar.org/docman/view.php/32/23/javadbf-tutorial.html<o:p></o:p> 最新版本:<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">0.4.0</st1:chsdate>,最后发布时间还是在<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="4" year="2004">2004年4月1日</st1:chsdate>,看来DBF真是老了。老归老,有些时候还是得用。<o:p></o:p> 下面是分别是读取和写DBF文件以及其他操作函数(关键信息的解释我放在了注释里,这样看起来会更方便):<o:p></o:p> 读取DBF文件:<o:p></o:p> <o:p>java 代码
写DBF文件: java 代码
注意:writer.addRecord(rowData)时并不真正写入数据,在最后writer.write(fos)时才会把数据写入DBF文件,之前addRecord的数据暂时存放在内存中。如果数据量过大,这种方式显然不适合,内存中存储的数据过多,所以JavaDBF提供了另外一种机制来解决这个问题:Sync Mode(同步模式)。使用方法如下: 用new DBFWriter(new File(path))实例化DBFWriter类,最后写入数据时用writer.write(),这样在每次addRecord时数据就被写入的DBF文件中。 因为初始化DBFWriter时传递了DBF文件,所以不用再定义DBF表结构,如果你定义并加载表结构会报异常。
下面这个函数会根据你传入的数据信息自动生成DBF文件,这样以后我们只要构造好数组,就可以直接得到DBF文件,不用每次都去写重复的代码。
java 代码
可以看到定义JavaDBF表结构或者添加数据时是通过传递数组实现,也就是说只要我们有了这些用来构造表结果和表示结果集的数组就有了DBF文件,那么我们可以通过类似下面这样的函数把ResultSet信息转换成数组信息。
java 代码
细心的读者可能会发现:strutType[i] = (byte)meta.getColumnType(i)这条语句是不可靠的,的却,这里的代码我省略了,JavaDBF中的字段类型表示和ResultSetMetaData中的字段类型表示应该是不一致的,这里做一个类型映射和转换即可。
</o:p> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-08-28
我用了一样的方法读取dbf文件,但是读取的字段位置有问题。如“博客所有留言会成为论坛回贴”,本来属于一个字段的,但是用jdbfreader解析后就在两个字段里了。下载了个dbfviewer里看是正常的,dbf文件没有问题,请问你遇到过这种情况吗。
|
|
返回顶楼 | |
发表时间:2007-08-28
kimfly 写道 我用了一样的方法读取dbf文件,但是读取的字段位置有问题。如“博客所有留言会成为论坛回贴”,本来属于一个字段的,但是用jdbfreader解析后就在两个字段里了。下载了个dbfviewer里看是正常的,dbf文件没有问题,请问你遇到过这种情况吗。
目前没有,你可以把你认为读取有问题的DBF文件传上来或者发给我,我可以帮你看看。 |
|
返回顶楼 | |
发表时间:2007-08-29
谢谢了,后来我把他的源码发编译了调试了一下,好像在处理日期为空的时候有问题。暂时还没有处理,如有问题再请你帮忙。
|
|
返回顶楼 | |
发表时间:2007-10-17
在java写DBF文件的时候,发现了字段中文写入为乱码,有解决的办法吗,
|
|
返回顶楼 | |
发表时间:2007-10-17
楼上的为什么一篇文章就50分了?
|
|
返回顶楼 | |
发表时间:2007-10-18
读取的时候乱码我倒是解决过,写的时候还没有发现过乱码
|
|
返回顶楼 | |
发表时间:2007-10-22
DBFField里面的字段类型各自对应的数据库和SQL 字段类型 是什么样的对应关系啊
|
|
返回顶楼 | |
发表时间:2007-11-10
读的时候发现乱码如何解决的?用什么编码?
解决了,dbfReader.setCharactersetName("GB2312");
|
|
返回顶楼 | |
发表时间:2007-11-10
有谁操作过dbf中包含字段是日期时间型的吗,看了下源代码,没有处理这种类型的,有操作过的麻烦告诉下,谢谢。
|
|
返回顶楼 | |
浏览 18409 次