【发布时间】:2018-03-29 21:42:39
【问题描述】:
我正在尝试使用带有代码的 ucanaccess(4.0.2) jar 访问 MS Access 2016 (.accdb) 文件:
public class Test {
static String path ="*****/src/main/resources/TestDatabase.accdb"; //absolute path to my access file
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Connection conn = DriverManager.getConnection("jdbc:ucanaccess://"+path);
}
我收到以下异常:
Exception in thread "main" net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.2 Unsupported newer version: 5
at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:264)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
at db.Test.main(Test.java:29)
Caused by: java.io.IOException: Unsupported newer version: 5
at com.healthmarketscience.jackcess.impl.JetFormat.getFormat(JetFormat.java:293)
at com.healthmarketscience.jackcess.impl.DatabaseImpl.<init>(DatabaseImpl.java:517)
at com.healthmarketscience.jackcess.impl.DatabaseImpl.open(DatabaseImpl.java:400)
at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:252)
at net.ucanaccess.jdbc.DefaultJackcessOpener.open(DefaultJackcessOpener.java:35)
at net.ucanaccess.jdbc.DBReference.<init>(DBReference.java:161)
at net.ucanaccess.jdbc.DBReferenceSingleton.loadReference(DBReferenceSingleton.java:51)
at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:98)
... 3 more
使用的 Maven 依赖项:
任何帮助将不胜感激。
谢谢。
【问题讨论】:
-
Unsupported newer version: 5你真的不知道这意味着什么? -
令人惊讶的是,虽然 UCanAccess 声明支持 access 2016,但底层的 Jackcess 库却没有。这是 Jackcess 关于不支持版本的一个例外。不知道为什么不匹配。查看与 2016 版本相关的 UCanAccess 文档。也许那里有什么。您可以尝试手动覆盖到最新的 Jackcess 2.1.9,但我怀疑这是否会有所帮助。
-
我对 UCanAccess 没有那么丰富的经验,但在使用
BigInt数据类型的 ODBC 和数据库方面遇到过类似的问题。请参阅this Microsoft support page(BigInt 是一种真正的新数据类型,仅在较新版本的 Access 2016 中实现,我怀疑 UCanAccess 已经实现了它) -
@aleh 你是对的,我深入研究了代码,发现 ucanaccess jar 使用的 jackcess2.1.6 库尚不支持 MS Access 2016 中使用的喷气发动机。我会尝试用最新版本覆盖jackacess 2.1.6。
标签: java maven ms-access jdbc ucanaccess