Я использую базу данных Oracle с ojdbc7
драйвером
Я получаю Clob из ResultSet, используя (Clob)rs.getObject("DATA")
, а затем конвертирую его в строку в методе:
private String clobToString(Clob data) {
StringBuilder sb = new StringBuilder();
try (Reader reader = data.getCharacterStream(); BufferedReader br = new BufferedReader(reader)){
String line;
while(null != (line = br.readLine())) {
sb.append(line);
}
} catch (Exception e) {
logger.error("Failed to read CLOB", e);
}
return sb.toString();
}
Согласно Oracle Использование больших объектов
Java-объекты Blob, Clob и NClob остаются действительными по крайней мере в течение всей транзакции, в которой они были созданы. Это может привести к исчерпанию ресурсов приложения во время длительной транзакции. Приложения могут освобождать ресурсы Blob, Clob и NClob, вызывая их бесплатный метод.
В следующем фрагменте вызывается метод Clob.free для освобождения ресурсов, хранящихся для ранее созданного объекта Clob
Должен ли я добавить больше кода для выпуска в finally
:
finally {
try {
data.free();
} catch (SQLException e) {
logger.error("Failed to release Clob", e);
}
}
Или это незначительное дополнение, потому что Clob
не используется вне метода или существует простой / нативный способ получения String из большого объекта из базы данных?