私はSpring3フレームワークを使用するようにアプリケーションを動かしていると私は、OracleデータベースからBLOB
列を読み取るコードを持っている:BLOBをInputStreamとして読み込み中にConnection Closedエラーが発生しました。 Spring3 getJdbcTemplate()
これは動作します:
String fileSqlStr =
"select file_id, file_content from cpm_file where file_id = 4";
PreparedStatement ps = conn.prepareStatement(fileSqlStr);
ResultSet rs = ps.executeQuery();
rs.next();
int fileId = rs.getInt("file_id");
InputStream fis = rs.getBinaryStream("file_content");
ExlBOMImporter ei = new ExlBOMImporter(fis);
しかし、私は書き込みをしてみてくださいそれ春はJdbcTemplate
豆を使用して:
InputStream is = getJdbcTemplate().query(getFileContentSql, new RowMapper<InputStream>() {
public InputStream mapRow(ResultSet rs, int rowNum) throws SQLException {
OracleLobHandler lobHandler = new OracleLobHandler();
return lobHandler.getBlobAsBinaryStream(rs, "file_content");
}
}, fileId).get(0);
ExlImporter importer = new ExlBOMImporter(is);
importer.process();
私はjava.io.IOException: Closed Connection
例外を取得しています。
私は、処理する前に、SpringがInputStream
の接続を閉じる必要があると考えています。あなたたちはこれを書く良い方法がありますか?
編集:例外にいくつかのより多くの深さ:それはquery
方法を離れるとき
java.io.IOException: Closed Connection
at oracle.jdbc.driver.OracleBlobInputStream.needBytes(OracleBlobInputStream.java:204)
at oracle.jdbc.driver.OracleBufferedStream.readInternal(OracleBufferedStream.java:169)
at oracle.jdbc.driver.OracleBufferedStream.read(OracleBufferedStream.java:143)
at org.apache.poi.util.IOUtils.readFully(IOUtils.java:92)
at org.apache.poi.util.IOUtils.readFully(IOUtils.java:77)
at oracle.jdbc.driver.OracleBlobInputStream.needBytes(OracleBlobInputStream.java:204)
意味があります。そして、それは動作します。 ResultSetExtractorビットのヒントをありがとう。 – jonasespelita