摘要:记录了在 JDK 11 下操作 Access 数据库的方法,作为备忘。
Access 堪称历史文物级别的数据库。目前见到的用户,几乎都是一些设备生产厂家,通常配合 VB 来做设备管理系统,也有配合 Excel 的宏代码来做报表输出的。
需求
读取 Access 数据库所有内容。
问题描述及解决方案
经过搜索,发现自 JDK1.8 起就不再包含 Access 桥接驱动,也了解到 UCanAccess 可作为替代方案。但是这个库有个很大的缺点:不支持中文。如果数据库中有中文数据,无论采用什么编码方式,读取出来的数据都是乱码。
// https://mvnrepository.com/artifact/net.sf.ucanaccess/ucanaccess
compile group: 'net.sf.ucanaccess', name: 'ucanaccess', version: '4.0.4'
于是继续寻找方法,最终使用 Access JDBC 30 解决了问题。注:这个 jar 包可能存在只能读取 1000 条数据的限制,具体解决方案网上已有很多,这里不再赘述。可参考本链接。
示例代码
Class.forName("com.hxtt.sql.access.AccessDriver");
Properties pro = new Properties();
// 添加编码方式,否则中文也是乱码
pro.setProperty("charSet", "GB2312");
Connection connection = DriverManager.getConnection(url, pro);
String url = "jdbc:Access:///C:/desk/access/src/main/resources/data.mdb";
Statement statement = connection.createStatement();
String sql = "Select * FROM table";
ResultSet rs = statement.executeQuery(sql);
StringBuilder record = new StringBuilder();
while (rs.next()) {
// 演示,仅获取第 1 列,也可以指定列名称
record.append(rs.getString(1));
}
rs.close();
connection.close();