由于业务需要,以access数据库形式存储的信息,需要导入到系统当中,其中原access数据库文件中有一个.mht对象的字段,在access数据库中以ole字段存储。所以,现考虑两点问题,一个是如何在java中读取.mdb文件,另一个是ole字段的会不会正常读写。所以,写了个demo来测试下。
首先在access中新建立一个test.mdb。建立test表,表字段为id(自增序列),txt,ole。给txt字段一个test1文本,ole对象插入一个.mht格式的对象,这样就基本满足测试需要。
如图:
然后在eclipse中写一个测试操作。
import java.io.*;
import java.sql.*;
import java.util.*;
public class Test{
@SuppressWarnings("resource")
public static void main(String[] args) {
try {
String dbur1 = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c://test.mdb";
Connection conn = DriverManager.getConnection(dbur1, null, null);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from Test ");
if (rs != null ) {
while ( rs.next() ) {
//得到结果集中的流,获取指定列的值在当前行ResultSet对象作为流,第一列是1,第二个是2,…
InputStream msg = rs.getBinaryStream(3);
//设置一个文件输出流,以便生成文件
FileOutputStream file = null;
file = new FileOutputStream ("c:/test3.mht");
int len=0;
// 设置缓冲区。从结果集流中读一部分,放到缓冲区中,然后再读一部分。。。
byte[] buffer = new byte[1024];
while ((len = msg.read(buffer)) != -1) {//
file.write(buffer, 0, len);
}
// 刷新流中信息,以便将文件生成
file.flush();
System.out.print("读取成功");
file.close();
msg.close();
}
}
stmt.close();
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
经测试,是可以正常读写没问题的。其中要注意的是,odbc要连接成功,需要选择jdk1.8以下的版本,而且需要配置控制面板——系统安全——管理工具——数据源,具体操作,百度很多。
这样,初步测试对access.mdb文件的读取就算成功了。