【问题标题】:SQL Message Invalid column type: getBLOB not implemented for class oracle.jdbc.driver.T4CLongRawAccessorSQL 消息无效的列类型:没有为类 oracle.jdbc.driver.T4CLongRawAccessor 实现 getBLOB
【发布时间】:2015-10-24 14:38:38
【问题描述】:

我在尝试从 oracle DB 读取 Blob 时遇到问题 通过使用这个

rs.getBlob("ARCHIVE_REQ_FILE_BLOB")

我也试试这个

oracle.sql.BLOB blob= (oracle.sql.BLOB) ((OracleResultSet) rs).getBlob("ARCHIVE_REQ_FILE_BLOB");

出现如下错误

SQL Message Invalid column type: getBLOB not implemented for class oracle.jdbc.driver.T4CLongRawAccessor

use IBM WebSphere application server 8.5.5
open connection using WebSphere datasource
using oracle oracle 11.2.0.2

谁能帮帮我 谢谢大家

【问题讨论】:

  • 带有以下错误代码 17004 和 SQL Stat 99999
  • 请将其添加到问题中,而不是评论中。谢谢。

标签: java oracle


【解决方案1】:

您没有尝试读取 BLOB 值。您实际上在数据库中有一个 LONG RAW 值,并且您正试图读取它,就好像它是一个 BLOB

我建议您阅读Oracle documentation for reading data from LONG and LONG RAW values in JDBC。 Oracle 甚至提供了示例代码来帮助您。

【讨论】:

    【解决方案2】:

    如果您的列确实是 BLOB,那么您需要确保在 Java 代码中您没有将列定义为 LONG_RAW(搜索对 defineColumnType 的调用),因为这会使服务器将数据作为LONG_RAW 而不是 BLOB。

    【讨论】:

      【解决方案3】:

      如果内容对于您的用例来说不是太大,则在某些情况下可以在 SQL 级别上解决:

      select dbms_lob.substr( some_blob, 4000 ) as some_blob
      from some_tab
      

      根据您的 Oracle 数据库,您可以为 4000 选择更高的值,但对于旧版本,这几乎可以在任何地方使用。 有时3500 更安全,因为将某些字符通过 unicode 转换为多个 8 位字符。

      (以上将 blob 内容缩短为 4000 个字符,如有必要,并将 blob 转换为更合适的数据类型)

      【讨论】:

        猜你喜欢
        • 2013-10-16
        • 1970-01-01
        • 1970-01-01
        • 2016-08-21
        • 1970-01-01
        • 2012-08-07
        • 2017-06-14
        • 2017-10-07
        • 2015-07-14
        相关资源
        最近更新 更多