我有一个使用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)
答案 0 :(得分:2)
supportsSavePoints
方法是JDBC 3(Java 1.4)中引入的。 AbstractMethodError
建议此驱动程序仅实现JDBC 2.1(Java 1.3 iirc),或者甚至仅实现较旧的JDBC版本。
their most recent documentation支持此功能,它表示:
Advantage JDBC驱动程序支持JDBC 2.0 Core接口。它是 使用JDK / JRE 1.3进行编译和测试。 Advantage 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)甚至更高的支持。