当Spring遇到了Oracle,该怎么办
发表于:2007-06-20来源:作者:点击数:
标签:
下一页 1 2 这次项目,我可以被oralce气伤了。 oracle 9i怎么会有那么多问题,驱动怎么会有那么多问题。 好了,说问题吧。 这次的问题集中读写oracle的blob、clob字段上。 1,读写blob需要一个lobhander,虽然defaultlobhander可以用于大多数 数据库 和大多
下一页 1 2
这次项目,我可以被oralce气伤了。oracle 9i怎么会有那么多问题,驱动怎么会有那么多问题。
好了,说问题吧。
这次的问题集中读写oracle的blob、clob字段上。
1,读写blob需要一个lobhander,虽然defaultlobhander可以用于大多数数据库和大多数oracle的版本,却不能用过oracle 9i。我需要一个oraclelobhander。
以下是spring中的配置。
<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"
singleton="false">
<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor"
lazy-init="true"/> |
以下是dao中的片段
/**
* 更新指定的blob
* @param key
* @param contentStream
* @param contentLength
*/
public void updateBlog(final String key, final InputStream contentStream,
final int contentLength) {
logger.debug("update content");
try {
getJdbcTemplate().execute(
"update 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("update content fail");
throw re;
}
}
/**
* 取得指定的blob
* @param name
* @param contentStream
* @throws DataAclearcase/" target="_blank" >ccessException
*/
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);
}
}
}
);
} |
|
原文转自:http://www.ltesting.net