前面的博文中提到过项目中有解析dbf数据文件作导入的需求,因为项目中用到的DBF文件由FoxPro产生,本文的重点也围绕FoxPro的DBF文件展开。 java
其实网上有至关多的java工具,用于解析dbf文件,尝试了不少,效果都不太理想,主要问题出如今乱码问题、解析不到数据,因为我的没也时间去研究源码,其实也比较头疼byte的操做,说到底仍是寄但愿有个第三方的解析工具。最后让我发现了jdbc-odbc,尝试以后,发现不只从代码的编写的容易程度仍是到数据的解析出错问题都至关的完美,惟一的限制,利用jdbc-odbc解析FoxPro的dbf文件,须要安装微软提供的驱动,编程环境限于window。 sql
因为此次作得是导入,代码的重点也放在读上: 编程
package com.excellence.dbf.javadbf; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class DBFJdbcOdbcTest { public static void main(String[] args) { Connection conn = null; PreparedStatement pstm = null; ResultSet rs = null; //下面的代码其实都是基本的jdbc代码,因此编写上面基本没什么问题 String DB_URL = "jdbc:odbc:Driver={Microsoft FoxPro VFP Driver (*.dbf)};" + //写法相对固定 "UID=;"+ "Deleted=Yes;"+ "Null=Yes;"+ "Collate=Machine;"+ "BackgroundFetch=Yes;"+ "Exclusive=No;"+ "SourceType=DBF;"+ //此处指定解析文件的后缀 "SourceDB=E:\\users\\pengsy\\DBF\\data\\main"; //此处为dbf文件所在的目录 try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); try { conn = DriverManager.getConnection(DB_URL); pstm = conn.prepareStatement("select * from XXB"); // 此处的XXB 为DBF数据文件的名字 rs = pstm.executeQuery(); ResultSetMetaData metaData = pstm.getMetaData(); //展现dbf元数据信息 System.out.println("metaData.getColumnCount():"+metaData.getColumnCount()); System.out.println("**************************"); for(int i = 1 ; i <= metaData.getColumnCount() ; i++){ System.out.println("metaData.getCatalogName:"+metaData.getCatalogName(i)); System.out.println("metaData.getColumnClassName:"+metaData.getColumnClassName(i)); System.out.println("metaData.getColumnDisplaySize:"+metaData.getColumnDisplaySize(i)); System.out.println("metaData.getColumnLabel:"+metaData.getColumnLabel(i)); System.out.println("metaData.getColumnName:"+metaData.getColumnName(i)); System.out.println("metaData.getColumnType:"+metaData.getColumnType(i)); System.out.println("metaData.getColumnTypeName:"+metaData.getColumnTypeName(i)); System.out.println("metaData.getPrecision:"+metaData.getPrecision(i)); System.out.println("metaData.getScale:"+metaData.getScale(i)); System.out.println("metaData.getSchemaName:"+metaData.getSchemaName(i)); System.out.println("metaData.getTableName:"+metaData.getTableName(i)); System.out.println("**************************"); } //展现dbf中的行数据 while(rs.next()){ for(int i = 1 ; i <= metaData.getColumnCount() ; i++){ System.out.println(rs.getString(i)); } System.out.println("*******************************************"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(rs != null){ rs.close(); } if(pstm != null){ pstm.close(); } if(conn != null){ conn.close(); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
至于FoxPro用到的驱动,这里无法提供了,oschina不支持上传附件。有须要的同窗上网上下载或者找我都行。 工具