I have a client using Advantage DB and I'm trying to connect using JDBC. My url is as follows
jdbc:extendedsystems:advantage://localhost:6262;catalog=C:\Program Files (x86)\company\CMWin\Data\cmwin.add
When I connect (currently with datagrip, but everything else is the same error), I get a
java.lang.AbstractMethodError: Method com/extendedsystems/jdbc/advantage/ADSDatabaseMetaData.supportsSavepoints()Z is abstract
I know the JDBC driver works, but I'm not 100% sure what's wrong.
At the moment I see the tables, but when I try to access them I the above error and also
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)
The supportsSavePoints
method was introduced in JDBC 3 (Java 1.4). The AbstractMethodError
would suggest that this driver only implements JDBC 2.1 (Java 1.3 iirc) or maybe only even older JDBC versions.
This is supported by their most recent documentation, which says:
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
Contact the vendor of the database (or driver, if it is a separate vendor) and ask them if there is a version of the driver that implements more 'recent' JDBC features (recent intentionally in quotes, as JDBC 3 dates from December 2001). The current version of the JDBC specification is JDBC 4.3, introduced with Java 9.
You simply can't expect software to cater to ancient JDBC implementations. The DatabaseMetaData.supportsXXX()
methods are there for applications to discover feature support, and one should be able to expect that 17 years after introduction in JDBC, it should be safe to use. Be aware that Datagrip might expect JDBC 4.1 (Java 7) support or even higher.