编码:
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);
结果:
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 数据库中,其中一个字段是长文本,在代码中被视为 BLOB。默认情况下,SQL 开发人员工作台将 longtext 转换为 CLOB(对我来说很有意义),但代码需要 Blob。我猜这个错误不是很好:oracle.jdbc.driver.T4CClobAccessor(尽管它确实提到了 Clob)。
当我尝试以下操作时:
rs = stmt.executeQuery();
while (rs.next()) {
byte[] blobbytes = rs.getBytes("text");
String text = new String(blobbytes);
}
它引发了一个不受支持的异常——我首先要做的就是将新创建的 Oracle DB 中的类型与代码所期望的类型进行比较(不幸的是,我只是假设它们会匹配)。
对不起大家!不是我想太多,现在我必须弄清楚为什么最初的开发人员将 BLOB 类型用于 longtext