首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ResultSet.getBlob()异常

问ResultSet.getBlob()异常
EN

Stack Overflow用户
提问于 2009-08-04 17:24:30
回答 5查看 20.6K关注 0票数 2

“守则”:

代码语言:javascript
复制
ResultSet rs = null;

try { 
    conn = getConnection();
    stmt = conn.prepareStatement(sql);
    rs = stmt.executeQuery();

    while (rs.next()) {
        Blob blob = rs.getBlob("text");
        byte[] blobbytes = blob.getBytes(1, (int) blob.length());
    String text = new String(blobbytes);

结果:

代码语言:javascript
复制
java.sql.SQLException: Invalid column type: getBLOB not implemented for class oracle.jdbc.driver.T4CClobAccessor
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.Accessor.unimpl(Accessor.java:357)
at oracle.jdbc.driver.Accessor.getBLOB(Accessor.java:1299)
at oracle.jdbc.driver.OracleResultSetImpl.getBLOB(OracleResultSetImpl.java:1280)
at oracle.jdbc.driver.OracleResultSetImpl.getBlob(OracleResultSetImpl.java:1466)
at oracle.jdbc.driver.OracleResultSet.getBlob(OracleResultSet.java:1978)

我的课堂路径中有class12_10g.zip。我在谷歌上搜索过,基本上只找到了一个关于这个问题的网站,但这并没有帮助我。

有人对此有什么想法吗?

一个小小的背景:我们正在将一个数据库从MySQL转换到Oracle。在MySQL DB中,其中一个字段是长文本,它在代码中被视为BLOB。默认情况下,SQL developer工作台将长文本转换为CLOB (对我来说很有意义),但是代码期待Blob。我想这个错误没有那么好: oracle.jdbc.driver.T4CClobAccessor (虽然它提到了Clob)。

当我尝试以下几种方法时:

代码语言:javascript
复制
rs = stmt.executeQuery();

while (rs.next()) {
   byte[] blobbytes = rs.getBytes("text");
   String text = new String(blobbytes);
}

它抛出了一个不受支持的异常--首先,我所要做的就是比较新创建的Oracle DB中的类型与代码所期望的类型(不幸的是,我只是假设它们会匹配)。

对不起伙计们!并不是说我花了很多心思,现在我必须弄清楚为什么最初的开发人员使用BLOB类型作为长文本。

EN

回答 5

Stack Overflow用户

发布于 2009-08-04 17:28:29

不确定是否使Blob对象工作--我通常跳过Blob步骤:

代码语言:javascript
复制
rs = stmt.executeQuery();

while (rs.next()) {
   byte[] blobbytes = rs.getBytes("text");
   String text = new String(blobbytes);
}
票数 4
EN

Stack Overflow用户

发布于 2009-08-04 17:32:49

尝试使用最新版本的驱动程序(10.2.0.4)。还可以尝试JDK1.4/1.5的驱动程序,因为classes12用于JDK1.2/1.3。

票数 2
EN

Stack Overflow用户

发布于 2009-08-04 17:29:12

试着..。

代码语言:javascript
复制
  PreparedStatement stmt = connection.prepareStatement(query);
  ResultSet rs = stmt.executeQuery();
  rs.next();
  InputStream is = rs.getBlob(columnIndex).getBinaryStream();

...instead?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1228827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档