Код:
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 по умолчанию преобразует длинный текст в CLOB (имеет смысл для меня), но код ожидал Blob. Полагаю, ошибка не была такой уж приятной: oracle.jdbc.driver.T4CClobAccessor (хотя там упоминается Clob).
Когда я попробовал следующее:
rs = stmt.executeQuery();
while (rs.next()) {
byte[] blobbytes = rs.getBytes("text");
String text = new String(blobbytes);
}
он выдал неподдерживаемое исключение - все, что мне нужно было сделать в первую очередь, это сравнить типы во вновь созданной базе данных Oracle с тем, что ожидал код (к сожалению, я просто предполагал, что они будут совпадать).
Извините, ребята! Не то чтобы я много думал об этом, теперь я должен выяснить, почему первоначальные разработчики использовали типы BLOB для длинного текста