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

问题描述 投票:0回答:3

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

rs.getBlob("ARCHIVE_REQ_FILE_BLOB")

我也试过这个

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

出现以下错误

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

我使用IBM WebSphere应用服务器8.5.5,使用oracle oracle 11.2.0.2使用WebSphere数据源打开连接

java oracle
3个回答
0
投票

您并不是在尝试读取

BLOB
值。实际上,数据库中有一个
LONG RAW
值,并且您尝试将其读取为
BLOB

我建议您阅读 Oracle 文档,以从 JDBC

 中的 
LONG
LONG RAW
值读取数据。 Oracle 甚至提供了示例代码来帮助您。


0
投票

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


0
投票

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

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

根据您的 Oracle 数据库,您可以为

4000
选择更高的值,但对于旧版本,这应该几乎在任何地方都适用。 有时
3500
更安全
,因为某些字符的unicode转换为多个8位字符。

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

© www.soinside.com 2019 - 2024. All rights reserved.