java.lang.AbstractMethodError:方法 com/extendedsystems/jdbc/advantage/ADSDatabaseMetaData.supportsSave

Posted

技术标签:

【中文标题】java.lang.AbstractMethodError:方法 com/extendedsystems/jdbc/advantage/ADSDatabaseMetaData.supportsSavepoints()Z 是抽象的【英文标题】:java.lang.AbstractMethodError: Method com/extendedsystems/jdbc/advantage/ADSDatabaseMetaData.supportsSavepoints()Z is abstract 【发布时间】:2018-07-09 16:06:59 【问题描述】:

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

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$1.run(Transport.java:200) at sun.rmi.transport.Transport$1.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$0(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)

【问题讨论】:

【参考方案1】:

supportsSavePoints 方法是在 JDBC 3 (Java 1.4) 中引入的。 AbstractMethodError 建议该驱动程序仅实现 JDBC 2.1 (Java 1.3 iirc) 或者甚至可能仅实现较旧的 JDBC 版本。

their most recent documentation 支持这一点,上面写着:

Advantage JDBC 驱动程序支持 JDBC 2.0 核心接口。这是 使用 JDK/JRE 1.3 编译和测试。优势 JDBC 驱动程序 可以连接到 Advantage Database Server 7.0 或更高版本

联系数据库的供应商(或驱动程序,如果它是单独的供应商)并询问他们是否有实现更多“最新”JDBC 功能的驱动程序版本(最近特意用引号括起来,因为 JDBC 3 的日期从2001 年 12 月)。 JDBC 规范的当前版本是 JDBC 4.3,随 Java 9 引入。

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

【讨论】:

以上是关于java.lang.AbstractMethodError:方法 com/extendedsystems/jdbc/advantage/ADSDatabaseMetaData.supportsSave的主要内容,如果未能解决你的问题,请参考以下文章