前一个星期碰到一个需求,是这样的:

本地系统有一张表,用于存放一种病人文书的记录,类似于一张病人信息登记表,需要将这个一定时间段内的数据,导出成dbf文件

碰到需求的时候,我在像dbf文件是个啥玩意儿,没见过啊。百度一下,哦,原来是数据库的数据文件,而且要数据库的控制文件里有描述信息,数据库实例,才可以加载里面的数据到内存。 所以我就建了个tablespace,以及dbf文件,然后把本地的数据插入这个表空间的一个新表(new)里,每次点击导出,调用存储过程,先清空new(避免护士手贱,经常点啊点的,把表不断扩大,到时候我查数据都卡死),然后把本地的表查出来,插入到new表,ok,告诉客户,你每次都从数据库所在的服务器,oracle的目录里找那个,我新建的dbf文件,拷过去就ok了。 可是。。。。。是不对的,客户说你这个dbf文件,导不进去。

后来,医院那边说,他们是用foxPro打开dbf文件的。ok,我装了一个,装了之后,我把我之前建的dbf文件打开,我嚓,真打不开,报错,“不是一个表”。

我就想,难道一个表也可以导出成一个dbf文件?  我百度。。果然可以,搜了一下找到一个博客,说要用javadbf外来jar包,来导出成dbf。我按照他给的实例,敲了一个。果然可以。

下面是我的代码:

//这里是总的业务逻辑,下面的方法是具体的底层实现

public boolean exportBirthInfoFromDocForm( final Date from,final Date to) throws DBFException{OutputStream fos = null;this.docPatientFormDAO.getBirthInfoFromDocForm(from, to);DBFField[]  fields = this.docPatientFormDAO.getDBFFields("BIRTH");//定义DBFWriter实例用来写DBF文件   DBFWriter writer = new DBFWriter(); //把字段信息写入DBFWriter实例,即定义表结构  try {writer.setFields(fields);} catch (DBFException e) {// TODO Auto-generated catch blocke.printStackTrace();}   writer=  this.docPatientFormDAO.addRecordsToWriter(writer,fields);//定义输出流,并关联的一个文件   try {fos = new FileOutputStream("C:\\xxxx.dbf");writer.write(fos); } catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally{try{   fos.close();}catch(Exception e){}}return true;}
docPatientFormDAO里的<span style="font-family: Arial, Helvetica, sans-serif;">getDBFFields方法:</span>
<span style="font-family: Arial, Helvetica, sans-serif;">public DBFField[] getDBFFields(String tableName) {
<span style="white-space:pre">     </span>// TODO Auto-generated method stub</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre">        </span>//x现获取表的定义
<span style="white-space:pre">     </span>String sql ="select column_name,data_type,data_length from all_tab_columns where table_name=? order by column_name";
<span style="white-space:pre">     </span> List<TableDefinition> list = this.jdbcTemplate.query(sql, new Object[] {tableName}, new RowMapper<TableDefinition>() {
<span style="white-space:pre"> </span>            public TableDefinition mapRow(ResultSet rs, int rowNum) throws SQLException {
<span style="white-space:pre"> </span>            <span style="white-space:pre">    </span>TableDefinition def = new    TableDefinition();
<span style="white-space:pre"> </span>                 <span style="white-space:pre">   </span>def.columnName=rs.getString("column_name");
<span style="white-space:pre"> </span>                 <span style="white-space:pre">   </span>def.columnDataType=rs.getString("data_type");
<span style="white-space:pre"> </span>                 <span style="white-space:pre">   </span>def.columnLength=rs.getInt("data_length");             <span style="white-space:pre">  </span>
<span style="white-space:pre"> </span>                return def;
<span style="white-space:pre"> </span>            }
<span style="white-space:pre"> </span>        });</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre">        </span>//然后将表的定义转换成dbf文件里的表头,就是一个个dbfField(其实跟excel差不多)
<span style="white-space:pre">     </span> List<DBFField> fields = new ArrayList<DBFField>();
<span style="white-space:pre">     </span> for(TableDefinition def:list){
<span style="white-space:pre">         </span> DBFField field = new DBFField();</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre">            </span>//这个javadbf文件的jar包,也是个坑货(不过还是值得称道的,毕竟给我解决了一个难题),这个field的name居然有长度限制小于等于10</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre">            </span>//将字段的名称,减去一个字母,此处请原谅我的无能,没办法,需求崔的急。不过我事后想了下,应该这里特殊处理没关系的,我取前十的字母,然后</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre">            </span>//填写dbf的Field的时候,我和表的字段定义比较一下,然后把减去的字母不上,不知道有没有更好的方法
<span style="white-space:pre">         </span> if(def.columnName.equals("CF_JZD_QHDM")){
<span style="white-space:pre">             </span> def.columnName="CF_JZ_QHDM";
<span style="white-space:pre">         </span> }
<span style="white-space:pre">         </span> field.setName(def.columnName);
<span style="white-space:pre">         </span> /**
<span style="white-space:pre">         </span>  *
<span style="white-space:pre">             </span>DBFField.FIELD_TYPE_D  表示Date型
<span style="white-space:pre">             </span>DBFField.FIELD_TYPE_L  表示布尔型
<span style="white-space:pre">             </span>DBFField.FIELD_TYPE_N  表示数字
<span style="white-space:pre">             </span>DBFField.FIELD_TYPE_C  表示字符串
<span style="white-space:pre">         </span>  */
<span style="white-space:pre">         </span> if(def.columnDataType.endsWith("VARCHAR2")){
<span style="white-space:pre">         </span> field.setDataType(DBFField.FIELD_TYPE_C);
<span style="white-space:pre">         </span> }
<span style="white-space:pre">         </span> if(def.columnDataType.equals("NUMBER")){
<span style="white-space:pre">             </span> field.setDataType(DBFField.FIELD_TYPE_N);
<span style="white-space:pre">         </span> }
<span style="white-space:pre">         </span> field.setFieldLength(def.columnLength);
<span style="white-space:pre">         </span> fields.add(field);
<span style="white-space:pre">     </span> }
<span style="white-space:pre">     </span> return fields.toArray(new DBFField[fields.size()]);
<span style="white-space:pre"> </span>}
</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre">    </span></span><pre name="code" class="html">docPatientFormDAO.addRecordsToWriter(writer,fields)这个方法的实现:
public DBFWriter addRecordsToWriter(DBFWriter writer,DBFField[] fields) throws DBFException{
<span style="white-space:pre">     </span>//每行5个字段
<span style="white-space:pre">     </span>List<DBFField> fieldList = java.util.Arrays.asList(fields);
<span style="white-space:pre">     </span>String sql ="select JG_BCRQ,JG_LXDH,JG_TBR,JG_DWFZR,FM_PF4, "+
<span style="white-space:pre">             </span>" FM_RSJJ4,FM_XB4,FM_PF3,FM_RSJJ3,FM_XB3, "+
<span style="white-space:pre">             </span>"FM_PF2,FM_RSJJ2,FM_XB2,FM_PF1,FM_RSJJ1,"+
<span style="white-space:pre">             </span>"FM_XB1,CF_FMRQ,CF_FMFS,CF_FMDD,CF_GWYS,"+
<span style="white-space:pre">             </span>"CF_CC,CF_YC,CF_JZD_QHDM,CF_JZD_XQ,CF_JZD_SD,"+
<span style="white-space:pre">             </span>"CF_JZD_S,CF_HJ_QHDM,CF_HJ_XQ,CF_HJ_SD,CF_HJ_S,"+
<span style="white-space:pre">             </span>"CF_MZ,CF_GJ,CF_CSRQ,CF_ZJHM,CF_ZJLX,"+
<span style="white-space:pre">             </span>"CF_BAH,CF_JDSJ,CF_BH,CF_XM,JG_ZC,"+
<span style="white-space:pre">             </span>"USERNAME from <span style="white-space:pre">    </span>birth ";
<span style="white-space:pre">     </span> List<BirthForm> list = this.jdbcTemplate.query(sql, new Object[] {}, new RowMapper<BirthForm>() {
<span style="white-space:pre"> </span>            public BirthForm mapRow(ResultSet rs, int rowNum) throws SQLException {
<span style="white-space:pre"> </span>            <span style="white-space:pre">    </span>BirthForm form  = getFormFromRS( rs);<span style="white-space:pre">  </span>          <span style="white-space:pre">  </span>
<span style="white-space:pre"> </span>                return form;
<span style="white-space:pre"> </span>            }
<span style="white-space:pre"> </span>        });
<span style="white-space:pre">     </span>
<span style="white-space:pre">     </span> for(BirthForm form :list){
<span style="white-space:pre">         </span>Object[] rowData = new Object[41];
<span style="white-space:pre">         </span>rowData[0]=         form.CF_BAH;
<span style="white-space:pre">         </span>rowData[1]=<span style="white-space:pre">    </span>    <span style="white-space:pre">    </span>form.CF_BH ;
<span style="white-space:pre">         </span>rowData[2]=<span style="white-space:pre">    </span>    <span style="white-space:pre">    </span>form.CF_CC ;
<span style="white-space:pre">         </span>rowData[3]=<span style="white-space:pre">    </span>    <span style="white-space:pre">    </span>form.CF_CSRQ ;
<span style="white-space:pre">         </span>rowData[4]=<span style="white-space:pre">    </span>    <span style="white-space:pre">    </span>form.CF_FMDD ;
<span style="white-space:pre">         </span>rowData[5]=<span style="white-space:pre">    </span>    <span style="white-space:pre">    </span>form.CF_FMFS ;
<span style="white-space:pre">             </span>    <span style="white-space:pre">    </span>
<span style="white-space:pre">         </span>rowData[6]=<span style="white-space:pre">    </span>    <span style="white-space:pre">    </span>form.CF_FMRQ ;
<span style="white-space:pre">         </span>rowData[7]=<span style="white-space:pre">    </span>    <span style="white-space:pre">    </span>form.CF_GJ;
<span style="white-space:pre">         </span>rowData[8]=<span style="white-space:pre">    </span>    <span style="white-space:pre">    </span>form.CF_GWYS ;
<span style="white-space:pre">         </span>rowData[9]=<span style="white-space:pre">    </span>    <span style="white-space:pre">    </span>form.CF_HJ_QHDM ;
<span style="white-space:pre">         </span>rowData[10]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_HJ_S ;
<span style="white-space:pre">             </span>    <span style="white-space:pre">    </span>
<span style="white-space:pre">         </span>rowData[11]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_HJ_SD ;
<span style="white-space:pre">         </span>rowData[12]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_HJ_XQ;
<span style="white-space:pre">         </span>rowData[13]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_JDSJ;
<span style="white-space:pre">         </span>rowData[14]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_JZD_QHDM ;
<span style="white-space:pre">         </span>rowData[15]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_JZD_S ;
<span style="white-space:pre">             </span>    <span style="white-space:pre">    </span>
<span style="white-space:pre">         </span>rowData[16]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_JZD_SD ;
<span style="white-space:pre">         </span>rowData[17]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_JZD_XQ ;
<span style="white-space:pre">         </span>rowData[18]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_MZ ;
<span style="white-space:pre">         </span>rowData[19]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.cf_XM ;
<span style="white-space:pre">         </span>rowData[20]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_YC;
<span style="white-space:pre">             </span>    <span style="white-space:pre">    </span>
<span style="white-space:pre">         </span>rowData[21]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_ZJHM;
<span style="white-space:pre">         </span>rowData[22]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.CF_ZJLX ;
<span style="white-space:pre">         </span>rowData[23]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_PF1 ;
<span style="white-space:pre">         </span>rowData[24]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_PF2;
<span style="white-space:pre">         </span>rowData[25]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_PF3;
<span style="white-space:pre">             </span>    <span style="white-space:pre">    </span>
<span style="white-space:pre">         </span>rowData[26]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_PF4 ;
<span style="white-space:pre">         </span>rowData[27]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_RSJJ1;
<span style="white-space:pre">         </span>rowData[28]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_RSJJ2;
<span style="white-space:pre">         </span>rowData[29]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_RSJJ3 ;
<span style="white-space:pre">         </span>rowData[30]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_RSJJ4 ;
<span style="white-space:pre">             </span>    <span style="white-space:pre">    </span>
<span style="white-space:pre">         </span>rowData[31]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_XB1 ;
<span style="white-space:pre">         </span>rowData[32]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_XB2 ;
<span style="white-space:pre">         </span>rowData[33]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_XB3 ;
<span style="white-space:pre">         </span>rowData[34]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.FM_XB4 ;
<span style="white-space:pre">         </span>rowData[35]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.JG_BCRQ ;<span style="white-space:pre">  </span>
<span style="white-space:pre">         </span>
<span style="white-space:pre">         </span>rowData[36]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.JG_DWFZR ;
<span style="white-space:pre">         </span>rowData[37]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.JG_LXDH ;
<span style="white-space:pre">         </span>rowData[38]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.JG_TBR ;
<span style="white-space:pre">     </span>    rowData[39]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.JG_ZC ;
<span style="white-space:pre">     </span>    rowData[40]=<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>form.username ;
<span style="white-space:pre">     </span>    writer.addRecord(rowData);
<span style="white-space:pre">     </span> }
<span style="white-space:pre">     </span> return writer;
<span style="white-space:pre">     </span>
<span style="white-space:pre"> </span>}
<span style="white-space:pre">  </span>//字段太多,写的我手软,而且要一一对应。不然dbf文件显示的数据就是错的
<span style="white-space:pre">  </span>//写完之后总算可以了,哈哈

给百度点无数个赞,我的无数个问题都是询问百度得知的,话说百度ceo是谁?百度下,哈哈

这个dbf文件是要传到一个上报系统里的,估计他们上报系统正好和我做的相反,他们把dbf文件,转化成数据库的表数据。

用javadbf从数据库导出数据成dbf文件相关推荐

  1. 从Oracle导出数据到TXT文件从TXT文件导入数据到Oracle

    如果是txt文件的数据导入oracle中,数据量大的话用pl/sql会卡死,那么就要用到sqlload命令. 前两天在做一个不算任务的任务,用shell脚本将数据库中的数据导出到文件,在万能的百度上找 ...

  2. 达梦数据库导出数据表结构为excel或html或文本(写文档用)

    达梦数据库导出数据表结构为excel或html或文本(写文档用) 项目中用的是国产达梦数据库,项目做了一期后应该是要数据库设计文档.其中就有一个需要表结构(字段,字段精度,说明...) 因为是国产数据 ...

  3. 用PB从ORACLE导出DBF文件,PB导出规定格式DBF文件

    最近在做一个给卫计委做数据上报的数据接口,接口要求使用奇葩的dBase 3数据库存储上报数据,忙活了几天总算搞好了,使用开发工具为powerbuild 12,222个字段的上报数据表生成DBF文件,写 ...

  4. mysql导出数据到txt太慢_分享:mysql导出数据到txt文件

    本节主要内容: mysql导出数据到txt文件 sql语句示例: 复制代码 代码示例: SELECT email FROM xxxxxx where email is not null and ema ...

  5. Java导出数据到Excel文件

    Java导出数据到Excel文件 前言 如何导出 导出的基本流程 测试结果 测试数据及结果 测试代码 ExcelExportUtil.class 遇到的问题 lombok的问题 解决 Cell.set ...

  6. php上传和导出excel文件,(进阶篇)使用PHP导入Excel和导出数据为Excel文件

    有时需要将Excel表格的数据导入到mysql数据库中,我们使用PHP的一个开源项目PHP-ExcelReader可以轻松实现Excel的导入. 1.导入XLS PHP-ExcelReader这是一个 ...

  7. php导出数据到csv文件,php导出CSV文件代码 PHP导出数据到CSV 如何排版

    如何使用PHP导出csv和excel文件你走后,再也没有一个声音能让我在人海中突然回首张望. 把Excel文件导入mysql: 打开excel文件,可用phpExcel开源的类 或者: 先把excel ...

  8. php 数据导出到excel文件,PHP导出数据到excel文件

    下面介绍一个很另类的php导出数据到xls文件的方法,用到的函数有pack,iconv //上面三个自定义函数很重要,大家自行揣摩 function xlsBOF() { echo pack(&quo ...

  9. oracle写excel文件,ORACLE-将oracle数据库中数据写入excel文件

    ORACLE-将oracle数据库中数据写入excel文件主要实现思路: 1.声明一个纪录,用来存储导出的数据: 2.使用游标取数据到纪录中: 3.使用utl_file将纪录中的数据写入excel文件 ...

最新文章

  1. (转)关于数据库主键和外键(终于弄懂啦)
  2. linux 文件与目录管理命令
  3. ubuntu 14.04如何设置静态IP
  4. php 远程代码执行漏洞复现 cve-2019-11043
  5. 【c#】24点游戏的实现(可存档且局域网互联)
  6. 程序员面试宝典(Java)Beta6.0免费下载
  7. SQL 附加数据库时出现 无法打开物理文件错误
  8. mysql doen s exist_Mysql中大小写敏感问题导致的MySql Error 1146 Tabel doen’t exist错误
  9. signature=7a6addc49a87cb6a44a8da5a20a59d1f,Disks and Halos in Pre-Main-Sequence Stars
  10. JavaScript 计算细节解惑
  11. iOS 控件宽高字体大小适配方法
  12. 通过ESP32 logging库来启发我们的思维吧~~
  13. 用C#开发.NET CF蓝牙通信模块
  14. cuda环境安装--windows离线安装
  15. 木门代理商利用微信营销让自己的事业更上一层楼
  16. 实战 SQL:实现百度、高德等地图中的地铁换乘线路查询
  17. 谷歌浏览器控制台位置调整
  18. stm32f103r6最小系统原理图_stm32f103rct6最小系统原理图
  19. linux_网络配置
  20. javascript百炼成仙 第一章 掌握JavaScript基础 1.12 JavaScript运算符

热门文章

  1. 案例分析 | 优衣库DTC模式之会员电商
  2. 害死人不偿命的(3n+1)猜想
  3. Discord python 机器人
  4. 获取iWatch的UDID
  5. 数字信号处理与数字信号处理器
  6. 开通会员 html,会员-1.html
  7. 以太坊Solidity----什么是ABI?
  8. Nginx 从入门到实践,万字详解!
  9. (转)Qt+Halcon联合开发配置
  10. 【iOS沉思录】iOS内存管理试题总结与详解