java.lang.AbstractMethodError: Method com/extendedsystems/jdbc/advantage/ADSDatabaseMetaData.supportsSavepoints()Z is abstract

java.lang.AbstractMethodError: Method com/extendedsystems/jdbc/advantage/ADSDatabaseMetaData.supportsSavepoints()Z is abstract

我有一个使用 Advantage DB 的客户端,我正在尝试使用 JDBC 进行连接。 我的url如下

jdbc:extendedsystems:advantage://localhost:6262;catalog=C:\Program Files (x86)\company\CMWin\Data\cmwin.add

当我连接时(目前使用 datagrip,但其他一切都是相同的错误),我得到一个

java.lang.AbstractMethodError: Method com/extendedsystems/jdbc/advantage/ADSDatabaseMetaData.supportsSavepoints()Z is abstract

我知道 JDBC 驱动程序可以工作,但我不能 100% 确定问题出在哪里。

目前我看到了表格,但是当我尝试访问它们时出现了上述错误并且

SELECT t.* FROM table t java.lang.AbstractMethodError: Method com/extendedsystems/jdbc/advantage/ADSDatabaseMetaData.supportsSavepoints()Z is abstract at com.extendedsystems.jdbc.advantage.ADSDatabaseMetaData.supportsSavepoints(Unknown Source) at com.intellij.database.remote.jdbc.impl.RemoteDatabaseMetaDataImpl.supportsSavepoints(RemoteDatabaseMetaDataImpl.java:1350) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346) at sun.rmi.transport.Transport.run(Transport.java:200) at sun.rmi.transport.Transport.run(Transport.java:197) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:196) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run[=12=](TCPTransport.java:683) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) (no stack trace)

supportsSavePoints 方法是在 JDBC 3 (Java 1.4) 中引入的。 AbstractMethodError 表明此驱动程序仅实现 JDBC 2.1(Java 1.3 iirc)或可能仅实现更旧的 JDBC 版本。

这得到了 their most recent documentation 的支持,它说:

The Advantage JDBC Driver supports the JDBC 2.0 Core interfaces. It is compiled and tested using the JDK/JRE 1.3. The Advantage JDBC Driver can connect to Advantage Database Server 7.0 or greater

联系数据库供应商(或驱动程序,如果是单独的供应商)并询问他们是否有实现更多 'recent' JDBC 功能的驱动程序版本(最近有意在引号中,因为 JDBC 3 日期从 2001 年 12 月开始)。 JDBC 规范的当前版本是 JDBC 4.3,与 Java 9.

一起引入

您不能指望软件能够迎合古老的 JDBC 实现。 DatabaseMetaData.supportsXXX() 方法供应用程序发现功能支持,并且应该能够预期在 JDBC 中引入 17 年后,它应该可以安全使用。请注意,Datagrip 可能需要 JDBC 4.1 (Java 7) 支持或更高版本。