Я пытаюсь обновить столбец clob, используя объект соединения, который извлекается с помощью пула соединений Apache DBCP.не удалось обновить CLOB с помощью соединения DBCP
Раньше я реализовал пул соединений с использованием this, и он отлично работал, я могу обновить CLOB. Я переключился на DBCP, потому что получал java.sql.SQLException: ORA-01000: максимальные открытые курсоры превышены. Я проверил соединения, resultSet, подготовил объектыStatement во всех DAO. Все блоки , наконец, блокируют эти курсоры. Все еще сталкиваюсь с этой ошибкой и поэтому решил переключиться на DBCP.
Но, когда я пытаюсь обновить CLOB, с этим соединением DBCP, приложение просто зависает на pstmt.executeUpdate().
Connection conn = null;
PreparedStatement pstmt = null;
CLOB clob = null;
String q = "UPDATE REPORT_TABLE SET RPT_FILE = ? WHERE RPT_SEQ_NUM = ?";
...
conn = DBConnection.getConnection();
pstmt = conn.prepareStatement(q);
clob = getCLOB(xmlReport, conn);
pstmt.setObject(1, clob);
pstmt.setString(2, reportSeqNo);
if (pstmt.executeUpdate() == 1) {
logger.logError("Report has been successfully UPDATED");
}
...
где метод getCLOB() является:
private CLOB getCLOB(String xmlData, Connection conn) throws SQLException{
CLOB tempClob = null;
try{
// If the temporary CLOB has not yet been created, create new
tempClob = CLOB.createTemporary(conn, true, CLOB.DURATION_SESSION);
// Open the temporary CLOB in readwrite mode to enable writing
tempClob.open(CLOB.MODE_READWRITE);
// Get the output stream to write
Writer tempClobWriter = tempClob.getCharacterOutputStream();
// Write the data into the temporary CLOB
tempClobWriter.write(xmlData);
// Flush and close the stream
tempClobWriter.flush();
tempClobWriter.close();
// Close the temporary CLOB
tempClob.close();
} catch(SQLException sqlexp){
tempClob.freeTemporary();
sqlexp.printStackTrace();
} catch(Exception exp){
exp.printStackTrace();
tempClob.freeTemporary();
exp.printStackTrace();
}
return tempClob;
}
Я также попытался пропускание ((DelegatingConnection) conn).getInnermostDelegate()
соединения, но не использовать.
Кроме того, я пробовал то, что Shiny предложил here. На этот раз его висит, пока я выбираю данные.
Я использую Oracle 9i и версию драйвера Oracle JDBC выше 10 (извините, не смог вспомнить точную версию сейчас).
Не могли бы вы показать свой метод getCLOB (и какой тип данных «xmlReport»?)? – jsight