Spring dao框架——操作clob和blob資料型別
阿新 • • 發佈:2019-01-23
操作步驟:
1.配置spring支援獲取本地化jdbc操作物件
<!-- nativeJdbcExtractor 和 oracleLobHandler Bean 都設定為 lazy-init="true",這是因為 -->
<!-- nativeJdbcExtractor 需要通過執行期的反射機制獲取底層的 JDBC 物件, -->
<!-- 所以需要避免在 Spring 容器啟動時就例項化這兩個Bean。 -->
<bean id="nativeJdbcExtractor"class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor"
lazy-init="true" />
2.提供oracleLobHandler
<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true">
<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"></property>
</bean>
3.寫code,繼承jdbc模板,使用execute方法內部類AbstractLobCreatingPreparedStatementCallback
private LobHandler lobHandler;
/**
* @return the lobHandler
*/
public LobHandler getLobHandler() {
return lobHandler;
}
/**
* @param lobHandler the lobHandler to set
*/
public void setLobHandler(LobHandler lobHandler) {
this.lobHandler = lobHandler;
}
public void getInsertPutImage(String txtUrl,String imgUrl) throws IOException {
//寫文字
final File clobIn = new File(txtUrl);
final InputStream clobIs = new FileInputStream(clobIn);
final InputStreamReader clobReader = new InputStreamReader(clobIs);
//寫圖片
final File blobIn = new File(imgUrl);
final InputStream blobIs = new FileInputStream(blobIn);
getJdbcTemplate().execute(insertOracleSql, new AbstractLobCreatingPreparedStatementCallback(this.lobHandler) {
@Override
protected void setValues(PreparedStatement ps, LobCreator lobCreator)
throws SQLException, DataAccessException {
ps.setLong(1, 1l);
lobCreator.setClobAsCharacterStream(ps, 2, clobReader, (int)clobIn.length());
lobCreator.setBlobAsBinaryStream(ps, 3, blobIs, (int)blobIn.length());
}
});
clobReader.close();
blobIs.close();
}
AbstractLobCreatingPreparedStatementCallback 引數需要提供一個lobHander物件,使用時需要提供set方法。