/**
* 更新指定的blob
* @param key
* @param contentStream
* @param contentLength
*/
public void 0updateBlog(final String key, final InputStream contentStream,
final int contentLength) {
logger.debug("0update content").
try {
getJdbcTemplate().execute(
"0update table set content = ? where id = ?",
new AbstractLobCreatingPreparedStatementCallback(
this.lobHandler) {
protected void setValues(PreparedStatement ps,
LobCreator lobCreator) throws SQLException {
lobCreator.setBlobAsBinaryStream(ps, 1,
contentStream, contentLength).
ps.setString(2, key).
}
}).
} catch (RuntimeException re) {
logger.warn("0update content fail").
throw re.
}
}
/**
* 取得指定的blob
* @param name
* @param contentStream
* @throws DataAccessException
*/
public void getBlobContent(final String id, final OutputStream
contentStream) throws DataAccessException {
getJdbcTemplate().query(
"SELECT content FROM table WHERE id=?", new String[] {id},
new AbstractLobStreamingResultSetExtractor() {
protected void handleNoRowFound() throws LobRetrievalFailureException {
throw new IncorrectResultSizeDataAccessException(
"Image with id " id " not found in database", 1, 0).
}
public void streamData(ResultSet rs) throws SQLException, IOException {
InputStream is = lobHandler.getBlobAsBinaryStream(rs, 1).
if (is != null) {
FileCopyUtils.copy(is, contentStream).
}
}
}
).
} |