В коде?
Java (обновление поля CLOB, содержащегося как поле в объекте с именем dbo):
String sql = "SELECT clobby_wobby FROM table WHERE uuid = ? FOR UPDATE";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setLong(1, dbo.getUID());
ResultSet rs = ps.executeQuery();
if (rs.next()) {
oracle.sql.CLOB clob = (oracle.sql.CLOB) ((OracleResultSet) rs).getClob(1);
failed = writeClob(clob, dbo.getClobbyWobby());
}
rs.close();
ps.close();
где writeClob ():
protected boolean writeClob(oracle.sql.CLOB clob, String data) throws SQLException {
if (data == null) { return false; }
return writeClob(clob, data.toCharArray());
}
protected boolean writeClob(oracle.sql.CLOB clob, char[] data) throws SQLException {
if (data == null || clob == null) { return false; }
char[] buffer = new char[clob.getBufferSize()];
Writer os = clob.getCharacterOutputStream();
int len = -1;
CharArrayReader car = new CharArrayReader(data);
try {
while ((len = car.read(buffer)) != -1) {
os.write(buffer, 0, len);
os.flush();
}
} catch (IOException ioe) {
logger.error("IOException copying clob data into DB", ioe);
return false;
} finally {
try {
car.close();
os.close();
} catch (IOException ioe) {}
}
return true;
}
и иногда мне интересно, почему сам проклятый драйвер Oracle не может обнаружить, что поле является CLOB, и просто прозрачно справляется с ps.setString («очень длинное значение»); сам ... и это где кто-то отвечает: "Почему бы не использовать служебные методы Oracle LOB Java ?!" о котором я никогда не знал ...