JDK 11 下操作 Access 数据库

摘要:记录了在 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();

你可能感兴趣的:(JDK 11 下操作 Access 数据库)