国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

當Spring遇到了Oracle,該怎么辦

2024-08-29 13:34:56
字體:
供稿:網(wǎng)友
這次項目,我可以被oralce氣傷了。Oracle 9i怎么會有那么多問題,驅(qū)動怎么會有那么多問題。 好了,說問題吧。 這次的問題集中讀寫oracle的blob、clob字段上。 1,讀寫blob需要一個lobhander,雖然defaultlobhander可以用于大多數(shù)數(shù)據(jù)庫和大多數(shù)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 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);}}}); }
前一個方法是寫blob,后一個讀blob。后面一個在業(yè)務(wù)方法中,這樣用。
public void getBlobContent(HttpServletRequest request,HttpServletResponse response) {try {serviceDisplayDAO.getBlobContent(request.getParameter("id"),response.getOutputStream());} catch (DataAccessException e) {e.printStackTrace();
} catch (IOException e) {e.printStackTrace();} }
在頁面中只需要做個鏈接:href="/blob.do?action=getBlogContent&id='"+id+"'" 2,讀寫clob 這個要簡單一些,不過要需要oracle的驅(qū)動不能用class12.zip那個,要從oracle下一個新的版本,具體多少不記得了。
/** * 基于主鍵的查詢方法 根據(jù)給出的主鍵查詢一個業(yè)務(wù)并返回 * * @param key * @return */public List findByPrimaryKey(String key) {logger.debug("finding service by primary key");try {return getJdbcTemplate().query("SELECT serviceid,contenttype,templatetext FROM table where serviceid='"+key+"'",new RowMapper() {public Object mapRow(ResultSet rs, int rowNum) throws SQLException {String serviceid = rs.getString(1);String contenttype = rs.getString(2);String templatetext = lobHandler.getClobAsString(rs, 3);return new ServConTempBean(serviceid, contenttype, templatetext);}});} catch (RuntimeException re) {logger.warn("finding service by primary key failed", re);throw re;}} /** * 根據(jù)業(yè)務(wù)主鍵更新信息 * @param key * @param params * @param types * @return */public void updateContentByPrimaryKey(final String key,final String templatetext) {logger.debug("update service content by content template primary key");try {getJdbcTemplate().execute( "update table set templatetext=? where serviceid=?",new AbstractLobCreatingPreparedStatementCallback(this.lobHandler) {protected void setValues(PreparedStatement ps,LobCreator lobCreator) throws SQLException {lobCreator.setClobAsString(ps, 1, templatetext);ps.setString(2, key);}});} catch (RuntimeException re) {logger.warn("update service by service primary key failed", re);throw re;} }


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 金昌市| 栾城县| 沙雅县| 繁峙县| 东乌珠穆沁旗| 阳曲县| 曲麻莱县| 楚雄市| 东阿县| 长寿区| 长兴县| 游戏| 饶河县| 柳林县| 三门县| 玉环县| 福州市| 隆昌县| 婺源县| 厦门市| 黑河市| 鞍山市| 玛沁县| 谷城县| 正蓝旗| 噶尔县| 句容市| 兴隆县| 黑水县| 金寨县| 蒲城县| 顺平县| 会同县| 古蔺县| 焉耆| 五华县| 思茅市| 吉安市| 天镇县| 青川县| 柳林县|