快捷搜索:

dbf文件操作工具

dbf文件

DBF文件款式是一种对照“古老”的数据库文件款式了,dbf是dBase和FoxPro所应用的数据库款式,在没有这两种软件的环境下,可以应用Excel打开文件。在Excel的“打开”文件的对话框中,选择文件类型为“dBase(*.dbf)”就可以了。假如没有安装Excel,还可以应用别的的一些专门软件,如http://www.dbfview.com的DBFView,打开和编辑响应的DBF文件。DBF数据库文件由头记录(header record)和数据记录(data record)两个部分组成。头记录从文件位置0开始,定义数据库的布局及其它与数据库有关的信息;数据记录紧接在头记录后面,包孕了字段的实际文本内容。

dbf类型

dbf分两种,一种是Dbase,另一种是Foxpro的

对付Dbase不用装驱动就可以操作 ,如下面代码所示:

对应的对象代码:下面代码支持jdk1.7,对付jdk1.8不支持

package com.haiyi.tca.exchange.util;

import com.google.common.collect.Maps;

import com.haiyi.tca.exchange.model.exception.ExchangeRunTimeException;

import java.io.PrintWriter;

import java.sql.*;

import java.util.Map;

/**

* @author yujiakui

* @version 1.0

* Email: jkyu@haoyi-info.com

* date: 2018/7/16 8:52

* description:

**/

public class DbfUtil {

/**

* 操作类型

*/

private enum OpTypeEnum {

QUERY, UPDATE

}

/**

* 加载驱动

*/

static {

try {

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

} catch (ClassNotFoundException e) {

throw new ExchangeRunTimeException("sun.jdbc.odbc.JdbcOdbcDriver加载掉败,类找不到");

}

}

/**

* dbf连接器对应的map

* 此中key为对应的dbf文件夹路径

*/

private final static Map dbfConnectionMap = Maps.newHashMap();

/**

* 根据db文件对应的文件夹路径来得到对应的连接

*

* @param dbFolderPath

* @return

*/

private static Connection getConnectionByDbpath(String dbFolderPath) {

Connection connection = dbfConnectionMap.get(dbFolderPath);

if (null == connection) {

String url = "jdbc:odbc:DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=" + dbFolderPath + ";";

try {

connection = DriverManager.getConnection(url, "", "");

} catch (SQLException e) {

throw new ExchangeRunTimeException("DBF SQL履行非常dbFolderPath=" + dbFolderPath, e);

}

dbfConnectionMap.put(dbFolderPath, connection);

}

return connection;

}

/**

* 履行查询

*

* @param dbFolderPath 数据文件对应的路径

* @param sql

* @return

*/

public static ResultSet executeQuery(String dbFolderPath, String sql) {

return (ResultSet) executeSql(dbFolderPath, sql, OpTypeEnum.QUERY);

}

/**

* 履行sql语句,假如是查询则对应的object为结果聚拢,否则为boolean

*

* @param dbFolderPath

* @param sql

* @param opType

* @return

*/

private static Object executeSql(String dbFolderPath, String sql, OpTypeEnum opType) {

Connection connection = dbfConnectionMap.get(dbFolderPath);

PreparedStatement psDbf = null;

try {

psDbf = connection.prepareStatement(sql);

if (OpTypeEnum.QUERY.equals(opType)) {

return psDbf.executeQuery();

} else {

return psDbf.execute();

}

} catch (SQLException e) {

throw new ExchangeRunTimeException("DBF SQL履行非常sql=" + sql, e);

} finally {

try {

if (null != psDbf) {

psDbf.close();

}

} catch (SQLException sqlException) {

throw new ExchangeRunTimeException("DBF close履行非常sql=" + sql, sqlException);

}

}

}

/**

* 履行删除和更新措施

*

* @param dbFolderPath

* @param sql

* @return

*/

public static boolean executeUpdate(String dbFolderPath, String sql) {

return (Boolean) executeSql(dbFolderPath, sql, OpTypeEnum.UPDATE);

}

public static void main(String[] args) throws SQLException, ClassNotFoundException {

Connection connDbf = null;

PreparedStatement psDbf = null;

ResultSet rsDbf = null;//一个目录名称,下面寄放DBF文件

String filePath = "D:\\temp";//一个DBF文件夹,实际文件名称为tbUser.dbf,这里做为表名不用扩展名就可以

String fileName = "zq_order.dbf";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

// 开启日志

DriverManager.setLogWriter(new PrintWriter(System.out));

String url = "jdbc:odbc:DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=" + filePath + ";";

System.out.println(url);

connDbf = DriverManager.getConnection(url, "", "");

//String sql = "select * from " + fileName;

String sql = "delete from " + fileName;

psDbf = connDbf.prepareStatement(sql);

psDbf.execute();

//rsDbf = psDbf.executeQuery();

System.out.println(rsDbf);

/* ResultSetMetaData md = rsDbf.getMetaData();//获取键名

int columnCount = md.getColumnCount();//获取行的数量

while (rsDbf.next()) {

for (int i = 1; i

还有一种通用读取dbf文件的要领是直接读取dbf文件,应用如下依附进行读取

com.github.albfernandez

javadbf

1.9.2

https://github.com/albfernandez/javadbf

依附对应的DBFWriter和DBFReader进行操作

windows情况下Jdbc-odbc文件名过长问题办理

在windows情况下,假如对应的文件名称跨越8位,操作系统就会对每一个文件名别的其一个又名,应用敕令dir */x 进行查看,如下图所示:

操作系统对跨越8位的文件进行起一个又名

您可能还会对下面的文章感兴趣: