java解析FoxPro DBF数据文件

前面的博文中提到过项目中有解析dbf数据文件做导入的需求,由于项目中用到的DBF文件由FoxPro产生,本文的重点也围绕FoxPro的DBF文件展开。

其实网上有相当多的java工具,用于解析dbf文件,尝试了很多,效果都不太理想,主要问题出现在乱码问题、解析不到数据,由于个人没也时间去研究源码,其实也比较头疼byte的操作,说到底还是寄希望有个第三方的解析工具。最后让我发现了jdbc-odbc,尝试之后,发现不仅从代码的编写的容易程度还是到数据的解析出错问题都相当的完美,唯一的限制,利用jdbc-odbc解析FoxPro的dbf文件,需要安装微软提供的驱动,编程环境限于window

由于这次做得是导入,代码的重点也放在读上:

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不支持上传附件。有需要的同学上网上下载或者找我都行。

转载于:https://my.oschina.net/psuyun/blog/158812

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值