【JAVA】读取和写入数据库生成的dbf文件

后缀名为.dbf的文件是来源于数据库,是数据库保存数据的一种方式。在java的开源库中,javadbf开源库,是专门用来读写dbf文件的工具。

【开发环境】

1、java开发工具,jdk-8u144-windows-x64.exe。
2、IDE环境,eclipse-jee-neon-2-win32-x86_64
3、javadbf三方包 javadbf-1.5.0.jar,javadbf包开放源代码
4、代码库,GitHub仓库。
以上为windows环境,linux环境请联系博主,或自行搜索下载。

【开发流程】

1、javadbf包有两个主要的类,DBFWriter和DBFReader,从名字可以知道,一个是用来将java中生成的数据写入dbf文件的类,另一个一个则是从dbf文件中读到java程序中的类。

2、DBFField类,主要是用来存放列名、列名的数据类型,来方便java中的数据类型与dbf中的数据类型作比较。

3、DBFDataType类,存放dbf数据的数据类型包含有很多种,对应数据库中的数据类型,有以下几种
UNKNOWN
CHARACTER
VARCHAR
VARBINARY
DATE
FLOATING_POINT
DOUBLE
LOGICAL
MEMO
BINARY 
BLOB
GENERAL_OLE
PICTURE
NUMERIC
LONG
AUTOINCREMENT
CURRENCY
TIMESTAMP
TIMESTAMP_DBASE7
NULL_FLAGS

4、DBFWriter类中的addField()方法,目前只支持四种种数据类型,其中数字型包含整型和浮点型,即java中的long,int,short,double,float等。

CHARACTER字符型,DATE日期型,NUMERIC和FLOATING_POINT数字型,LOGICAL布尔型

5、DBFReader类中的getField()方法,则支持DBFDataType类的多种类型读取。nextRecord()方法,类似于Result.next()方法,用于读取下一条记录。

【开发代码】

//DbfFileRAndW.java

package dbfFileRAndW;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

import com.linuxense.javadbf.DBFDataType;
import com.linuxense.javadbf.DBFException;
import com.linuxense.javadbf.DBFField;
import com.linuxense.javadbf.DBFReader;
import com.linuxense.javadbf.DBFUtils;
import com.linuxense.javadbf.DBFWriter;

public class DbfFileRAndW {
	public static void main(String[] args) {
		DbfFileRAndW dbfFileRAndW = new DbfFileRAndW();
		try {
			dbfFileRAndW.testWriteAndReadAgain();
		} catch (DBFException | IOException e) {
			e.printStackTrace();
		}
	}

	public void testWriteAndReadAgain() throws DBFException, IOException {
		// let us create field definitions first
		// we will go for 3 fields
		//
		DBFField fields[] = new DBFField[3];

		fields[0] = new DBFField();
		fields[0].setName("emp_code");
		fields[0].setType(DBFDataType.CHARACTER);
		fields[0].setLength(10);

		fields[1] = new DBFField();
		fields[1].setName("emp_name");
		fields[1].setType(DBFDataType.CHARACTER);
		fields[1].setLength(20);

		fields[2] = new DBFField();
		fields[2].setName("salary");
		fields[2].setType(DBFDataType.NUMERIC);
		fields[2].setLength(12);
		fields[2].setDecimalCount(2);
		DBFWriter writer = null;
		DBFReader reader = null;
		FileInputStream fis = null;
		FileOutputStream fos = null;
		File f = new File("d:/emp.dbf");
		f.createNewFile();
		try {
			// 开始写
			fos = new FileOutputStream(f);
			writer = new DBFWriter(fos);
			writer.setFields(fields);

			// now populate DBFWriter
			//

			Object rowData[] = new Object[3];
			rowData[0] = "1000";
			rowData[1] = "John";
			rowData[2] = new Double(5000.00);

			writer.addRecord(rowData);

			rowData = new Object[3];
			rowData[0] = "1001";
			rowData[1] = "Lalit";
			rowData[2] = new Double(3400.00);

			writer.addRecord(rowData);

			rowData = new Object[3];
			rowData[0] = "1002";
			rowData[1] = "Rohit";
			rowData[2] = new Double(7350.00);

			writer.addRecord(rowData);

			DBFUtils.close(writer);
			System.out.println("The dbf file product success!");

			// 开始读
			fis = new FileInputStream(f);
			reader = new DBFReader(fis);
			Object[] objects = null;
			for (; (objects = reader.nextRecord()) != null;) {
				System.out.println(Arrays.toString(objects));
			}
			DBFUtils.close(reader);

		} finally {
			DBFUtils.close(reader);
			DBFUtils.close(writer);
		}
	}

}


你可能感兴趣的:(Java)