I have got an issue with JDBC.

I'have the next code:

//blargeparam is a blob column.
PreparedStatement pst =connection.prepareStatement("update gcp_processparams_log set blargeparam= ? where idprocessparamslog=1");

pst.setBinaryStream(1,inputStream);

I recieve the next error:

Exception in thread "main" java.lang.AbstractMethodError:           
oracle.jdbc.driver.T2CPreparedStatement.setBinaryStream(ILjava/io/InputStream;)V

My connection string is "jdbc:oracle:oci:@....."

The oracle version is 11g.

In the error message it appears that something is missing but:

  • after i read in the same blob column (with blob.getBytes) everything works.
  • The dll's from the instant client are (properly) within the library path.
  • This is actually the manifest from the oracle jdbc jar during my class path:

    Manifest-Version: 1.
    Specs-Title: Oracle JDBC driver courses of instruction for use with JDK14
    Sealed: true
    Produced-By: 1.4.2_14 (Sun Microsystems Corporation.)
    Implementation-Title: ojdbc14.jar
    Specs-Vendor: Oracle Corporation
    Specs-Version: Oracle JDBC Driver version - "10.2..4."
    Implementation-Version: Oracle JDBC Driver version - "10.2..4."
    Implementation-Vendor: Oracle Corporation
    Implementation-Time: Sitting February 2 11:40:29 2008

With JDBC, that error usually happens since your JDBC driver implements a mature version from the JDBC API compared to one incorporated inside your JRE. These older versions are fine as long as you do not try to make use of a method that made an appearance within the more recent API.

I am unsure what version of JDBC setBinaryStream made an appearance in. It has been around for some time, I believe.

Regardless, your JDBC driver version (10.2..4.) is very old, I suggest improving it towards the version which was launched with 11g (lower here), and check out again.

This is what the JDK API states about AbstractMethodError:

Tossed when a credit card applicatoin attempts to call an abstract method. Normally, this error is caught through the compiler this error are only able to occur at run time if the phrase some class has incompatibly transformed because the presently performing method was last put together.

Bug within the oracle driver, maybe?

I recommend looking into your classpath cautiously. You may have two different versions of the jar file where one creates techniques within the other and also the other technique is abstract.

It appears that even when the motive force 10.2 works with the JDBC3 it might not use JRE6 as I have found here:

http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html#02_03

Which JDBC motorists support which versions of Javasoft's JDK?

pre-8i OCI and THIN Motorists - JDK 1..x and JDK 1.1.x
8.1.5 OCI and THIN Motorists - JDK 1..x and JDK 1.1.x
8.1.6SDK THIN Driver - JDK 1.1.x and JDK 1.2.x (also known as Java2)
8.1.6SDK OCI Driver - Only JDK 1.1.x
8.1.6 OCI and THIN Driver - JDK 1.1.x and JDK 1.2.x
8.1.7 OCI and THIN Driver - JDK 1.1.x and JDK 1.2.x
9..1 OCI and THIN Driver - JDK 1.1.x, JDK 1.2.x and JDK 1.3.x
9.2. OCI and THIN Driver - JDK 1.1.x, JDK 1.2.x, JDK 1.3.x, and JDK 1.4.x
10.1. OCI and THIN Driver - JDK 1.2.x, JDK 1.3.x, and JDK 1.4.x
10.2. OCI and THIN Driver - JDK 1.2.x, JDK 1.3.x, JDK 1.4.x, and JDK 5..x
11.1. OCI and THIN Driver - JDK 1.5.x and JDK 1.6.x

Oracle 10.2. supports:

Full support for JDBC 3.
Observe that there's no real alternation in the support for an additional within the database. Allthat has transformed is the fact that some techniques that formerly put SQLException now make a move more modest rather.
result-set holdability
coming back multiple result-sets.

As referred to within the API of java.sql.PreparedStatement.setBinaryStream() it's available since 1.6 so it's a JDBC 4. API! You utilize a JDBC 3 Driver which means this technique is unavailable!