1. 程式人生 > >Spring dao框架——操作clob和blob資料型別

Spring dao框架——操作clob和blob資料型別

操作步驟: 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方法。