我在尝试从 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数据源打开连接
您并不是在尝试读取
BLOB
值。实际上,数据库中有一个 LONG RAW
值,并且您尝试将其读取为 BLOB
。
我建议您阅读 Oracle 文档,以从 JDBC
中的
LONG
和
LONG RAW
值读取数据。 Oracle 甚至提供了示例代码来帮助您。
如果您的列确实是 BLOB,那么您需要确保在 Java 代码中没有将该列定义为 LONG_RAW(搜索对 DefineColumnType 的调用),因为这将使服务器将数据作为 LONG_RAW 发送一个 BLOB。
在某些情况下,如果内容对于您的用例来说不是太大,可以在 SQL 级别上解决:
select dbms_lob.substr( some_blob, 4000 ) as some_blob
from some_tab
根据您的 Oracle 数据库,您可以为
4000
选择更高的值,但对于旧版本,这应该几乎在任何地方都适用。
有时3500
更安全,因为某些字符的unicode转换为多个8位字符。
(如有必要,上述内容将 blob 内容缩短为 4000 个字符,并将 blob 转换为更合适的数据类型)