尝试在db中加载blob时,为什么会出现java.lang.AbstractMethodError?

mic*_*sca 45 java database oracle jdbc oracleclient

我遇到了JDBC问题.

我有以下代码:

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

pst.setBinaryStream(1,inputStream);         
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

我的连接字符串是 jdbc:oracle:oci:@.....

Oracle版本为11g.

从错误消息似乎缺少某些东西但是:

  • 当我从相同的blob列(使用blob.getBytes)读取时,一切正常.
  • 即时客户端的DLL(正确地)在库路径中.
  • 这是我的类路径中Oracle JDBC JAR的清单:

    Manifest-Version: 1.0  
    Specification-Title:    Oracle JDBC driver classes for use with JDK14  
    Sealed: true  
    Created-By: 1.4.2_14 (Sun Microsystems Inc.)  
    Implementation-Title:   ojdbc14.jar  
    Specification-Vendor:   Oracle Corporation  
    Specification-Version:  Oracle JDBC Driver version - "10.2.0.4.0"  
    Implementation-Version: Oracle JDBC Driver version - "10.2.0.4.0"  
    Implementation-Vendor:  Oracle Corporation  
    Implementation-Time:    Sat Feb  2 11:40:29 2008  
    
    Run Code Online (Sandbox Code Playgroud)

ska*_*man 64

使用JDBC时,通常会发生该错误,因为JDBC驱动程序实现的JDBC API版本比JRE中包含的版本更旧.只要您不尝试使用新API中出现的方法,这些旧版本就可以了.

我不确定setBinaryStream出现了什么版本的JDBC .我认为它已经存在了一段时间.

无论如何,你的JDBC驱动程序版本(10.2.0.4.0)已经很老了,我建议将它升级到11g发布的版本(在这里下载),然后再试一次.


mic*_*sca 11

看起来即使驱动程序10.2与JDBC3兼容,它也可能不适用于JRE6,正如我在这里找到的:

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

哪些JDBC驱动程序支持哪些版本的Javasoft JDK?

pre-8i OCI和THIN驱动程序 - JDK 1.0.x和JDK 1.1.x
8.1.5 OCI和THIN驱动程序 - JDK 1.0.x和JDK 1.1.x
8.1.6SDK THIN驱动程序 - JDK 1.1.x和JDK 1.2.x(又称Java2)
8.1.6SDK OCI驱动程序 - 仅JDK 1.1.x
8.1.6 OCI和THIN驱动程序 - JDK 1.1.x和JDK 1.2.x
8.1.7 OCI和THIN驱动程序 - JDK 1.1.x和JDK 1.2.x
9.0. 1 OCI和THIN驱动程序 - JDK 1.1.x,JDK 1.2.x和JDK 1.3.x
9.2.0 OCI和THIN驱动程序 - JDK 1.1.x,JDK 1.2.x,JDK 1.3.x和JDK 1.4.x
10.1. 0 OCI和THIN驱动程序 - JDK 1.2.x,JDK 1.3.x和JDK 1.4.x
10.2.0 OCI和THIN驱动程序 - JDK 1.2.x,JDK 1.3.x,JDK 1.4.x和JDK 5.0.x
11.1 .0 OCI和THIN驱动程序 - JDK 1.5.x和JDK 1.6.x.

Oracle 10.2.0支持:

完全支持JDBC 3.0
请注意,数据库中对以下内容的支持没有真正的变化.所有改变的是,之前抛出SQLException的一些方法现在做了更合理的事情.
结果集可保持性
返回多个结果集.


Ste*_* B. 6

以下是JDK API关于AbstractMethodError的内容:

应用程序尝试调用抽象方法时抛出.通常,编译器会捕获此错误; 如果自上次编译当前正在执行的方法以来某些类的定义发生了不兼容的更改,则此错误只能在运行时发生.

也许是oracle驱动程序中的bug?