为什么我在尝试在数据库中加载 blob 时会得到 java.lang.AbstractMethodError?

2022-08-31 20:53:10

我有一个JDBC的问题。

我有以下代码:

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

pst.setBinaryStream(1,inputStream);         

我收到以下错误:

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

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

甲骨文版本是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  
    

答案 1

对于 JDBC,通常发生此错误是因为 JDBC 驱动程序实现的 JDBC API 版本比 JRE 中包含的版本旧。只要您不尝试使用在较新的API中出现的方法,这些旧版本就可以了。

我不确定JDBC出现在哪个版本中。我想,它已经存在了一段时间。setBinaryStream

无论如何,您的JDBC驱动程序版本(10.2.0.4.0)已经很旧了,我建议将其升级到随11g一起发布的版本(在此处下载),然后重试。


答案 2

看起来即使驱动程序10.2与JDBC3兼容,它也可能无法与JRE6一起使用,正如我在这里发现的那样:

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

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

8i OCI 和 THIN 驱动程序之前 - JDK 1.0.x 和 JDK 1.1.x
8.1.5 OCI 和 THIN Drivers - JDK 1.0.x 和 JDK 1.1.x
8.1.6SDK THIN Driver - JDK 1.1.x 和 JDK 1.2.x (又名 Java2)
8.1.6SDK OCI 驱动程序 - 只有 JDK 1.1.x
8.1.6 OCI 和 THIN Driver - JDK 1.1.x 和 JDK 1.2.x
8.1.7 OCI 和 THIN Driver - JDK 1.1.x 和 JDK 1.2.x
9.0.1 OCI 和 THIN Driver - JDK 1.1.x, JDK 1.2.x 和 JDK 1.3.x
9.2.0 OCI 和 THIN Driver - JDK 1.1.x、JDK 1.2.x、JDK 1.3.x 和 JDK 1.4.x
10.1.0 OCI 和 THIN Driver - JDK 1.2.x、JDK 1.3.x 和 JDK 1.4.x
10.2.0 OCI 和 THIN Driver - JDK 1.2.x、JDK 1.3.x、JDK 1.4.x 和 JDK 5.0.x
11.1.0 OCI 和 THIN Driver - JDK 1.5.x 和 JDK 1.6.x

甲骨文 10.2.0 支持:

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


推荐