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