SQL 消息无效的列类型:没有为类 oracle.jdbc.driver.T4CLongRawAccessor 实现 getBLOB

Posted

技术标签:

【中文标题】SQL 消息无效的列类型:没有为类 oracle.jdbc.driver.T4CLongRawAccessor 实现 getBLOB【英文标题】:SQL Message Invalid column type: getBLOB not implemented for class oracle.jdbc.driver.T4CLongRawAccessor 【发布时间】: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 请将其添加到问题中,而不是评论中。谢谢。 【参考方案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 转换为更合适的数据类型)

【讨论】:

以上是关于SQL 消息无效的列类型:没有为类 oracle.jdbc.driver.T4CLongRawAccessor 实现 getBLOB的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL - ALTER VIEW:ORA-00922:缺少或无效选项

java.sql.SQLException: 无效的列类型: 1111

无效的列类型 ~ 将 ArrayList<String> 发送到 pl/sql createdNameQuery

PL/SQL 编译失败,没有错误消息

在使用 NamedParameterJDBCTemplate 进行插入时出现“无效的列类型”异常

为啥oracle数据库链接不显示来自sql server的图像类型的列