“守则”:
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 DB中,其中一个字段是长文本,它在代码中被视为BLOB。默认情况下,SQL developer工作台将长文本转换为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类型作为长文本。
发布于 2009-08-04 17:28:29
不确定是否使Blob对象工作--我通常跳过Blob步骤:
rs = stmt.executeQuery();
while (rs.next()) {
byte[] blobbytes = rs.getBytes("text");
String text = new String(blobbytes);
}发布于 2009-08-04 17:32:49
尝试使用最新版本的驱动程序(10.2.0.4)。还可以尝试JDK1.4/1.5的驱动程序,因为classes12用于JDK1.2/1.3。
发布于 2009-08-04 17:29:12
试着..。
PreparedStatement stmt = connection.prepareStatement(query);
ResultSet rs = stmt.executeQuery();
rs.next();
InputStream is = rs.getBlob(columnIndex).getBinaryStream();...instead?
https://stackoverflow.com/questions/1228827
复制相似问题