java-spring的JdbcTempldate对oracle 的CLob字段进行读和写
来源:互联网 发布:mirror.centos.org 编辑:程序博客网 时间:2024/06/05 23:45
相关介绍-
Spring 让 LOB 数据操作变得简单易行(http://www.ibm.com/developerworks/cn/java/j-lo-spring-lob/)
具体代码:
Blob操作也类似Clob,也是通过LobHandler 类的方法进行操作。
import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.springframework.dao.DataAccessException;import org.springframework.jdbc.core.RowMapper;import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback;import org.springframework.jdbc.support.lob.DefaultLobHandler;import org.springframework.jdbc.support.lob.LobCreator;import org.springframework.jdbc.support.lob.LobHandler;import org.springframework.stereotype.Repository;import com.commom.model.PageBean;/** * 类:ReportTemplateDaoImpl.java * 时间:2016-1-8 * 说明:模板 */@Repositorypublic class ReportTemplateDaoImpl extends BaseDao{/** * 根据条件获取模板的信息 * @param queryMap:查询条件 * @return */public List<Map<String, Object>> queryReportTemplate(Map<String,Object> filterMap) {return execConditonSql(filterMap,false);}/** * 统计模板总记录数 * @param queryMap:查询条件 * @return */public int countReportTemplate(Map<String,Object> filterMap) {List<Map<String, Object>> retObjMapList = execConditonSql(filterMap, true);return Integer.valueOf(retObjMapList.get(0).get("count").toString());}/** * 根据条件查询模板信息 * @param filterMap * @return */public List<Map<String,Object>> execConditonSql(Map<String,Object> filterMap,boolean isCount){StringBuffer sql;if(isCount){//查数据条数sql = new StringBuffer(" select count(*) as count from TEMPLATE_TABLE where 1=1 ");}else{//查数据信息sql = new StringBuffer(" select * from TEMPLATE_TABLE where 1=1 ");}if(filterMap != null ){if(filterMap.containsKey("title")){sql.append("and title like '%"+ filterMap.get("title") +"%'");}if(filterMap.containsKey("label")){sql.append("and label like '%"+ filterMap.get("label") +"%'");}if(filterMap.containsKey("type")){sql.append("and type ="+Integer.valueOf(filterMap.get("type").toString()));}}//分页String execSql = sql.toString();if(!isCount && filterMap.containsKey("pageBean")){PageBean pb = (PageBean)filterMap.get("pageBean");execSql = getPageSql(execSql, pb.getBeginRowNum(), pb.getEndRowNum());}if(!isCount){//求表中数据的信息final LobHandler lobHandle = new DefaultLobHandler();@SuppressWarnings({ "unchecked", "rawtypes" })List<Map<String,Object>> resultList = this.jdbcTemplate.query(execSql,new RowMapper(){@Overridepublic Object mapRow(ResultSet rs, int rowsNum) throws SQLException{List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();while(rs.next()){long id = rs.getLong("id");String title = rs.getString("title");String label = rs.getString("label");int type = rs.getInt("type");//thumbnail_id 字段要根据ID去获得缩略图的模板 待处理int thumbnail_id = rs.getInt("thumbnail_id");String template_content = lobHandle.getClobAsString(rs, "template_content");Map<String,Object> map = new HashMap<String, Object>();map.put("id", id);map.put("title", title);map.put("label", label);map.put("type", type);//thumbnail_id 字段要根据ID去获得缩略图的模板 待处理map.put("thumbnail_id", thumbnail_id);map.put("template_content", template_content);list.add(map);}rs.close();return list;}});return resultList;}else{//求表中总的记录数return this.jdbcTemplate.queryForList(execSql);}}/** * 根据ID查找模板信息 * @param id * @return */public Map<String,Object> getReportTemplateById(int id){String sql ="select id,title,label,type,thumbnail_id,template_content from TEMPLATE_TABLE where id =?";final LobHandler lobHandle = new DefaultLobHandler();@SuppressWarnings({ "unchecked", "rawtypes" })Map<String,Object> resultMap = (Map<String, Object>) this.jdbcTemplate.query(sql, new Object[]{id},new RowMapper(){@Overridepublic Object mapRow(ResultSet rs, int rowsNum) throws SQLException{long id = rs.getLong(1);String title = rs.getString("title");String label = rs.getString("label");int type = rs.getInt("type");//thumbnail_id 字段要根据ID去获得缩略图的模板 待处理int thumbnail_id = rs.getInt("thumbnail_id");String template_content = lobHandle.getClobAsString(rs, "template_content");Map<String,Object> map = new HashMap<String, Object>();map.put("id", id);map.put("title", title);map.put("label", label);map.put("type", type);//thumbnail_id 字段要根据ID去获得缩略图的模板 待处理map.put("thumbnail_id", thumbnail_id);map.put("template_content", template_content);return map;}});return resultMap;}/** * 添加模板信息 * @param filterMap * @return * @throws IOException */public boolean addReportTemplateInfo(final Map<String,Object> filterMap){/* * 通过PreparedStatement预处理语句向SQL语句中依次添加各变量 */int affectNum = 0;if(filterMap.size() > 0){final String title = filterMap.get("title").toString();final String label = filterMap.get("label").toString();final Integer type = Integer.valueOf(filterMap.get("type").toString());//判断是否包含thumbnail_id 字段String strThumbnail_id ="0";if(filterMap.containsKey("thumbnail_id")){ strThumbnail_id = filterMap.get("thumbnail_id").toString();}final Integer thumbnail_id = Integer.valueOf(strThumbnail_id);final String template_content =filterMap.get("template_content").toString(); String sql = " INSERT INTO TEMPLATE_TABLE(id,title,label,type,thumbnail_id,template_content)" + " VALUES(TEMPLATE_TABLE_id_seq.nextval,?,?,?,?,?)"; LobHandler handle = new DefaultLobHandler(); affectNum = this.jdbcTemplate.update( sql, new AbstractLobCreatingPreparedStatementCallback( handle) {@Overrideprotected void setValues(PreparedStatement pStat, LobCreator lobCreator)throws SQLException, DataAccessException{ pStat.setString(1,title); pStat.setString(2,label); pStat.setInt(3, type); //判断是否包含缩略图ID,没有插入空内容 if(filterMap.containsKey("thumbnail_id")) { pStat.setInt(4, thumbnail_id); }else { pStat.setString(4,""); } lobCreator.setClobAsString(pStat,5,template_content );} });}return affectNum > 0; }/** * 更新模板信息 * @param filterMap * @return */public boolean updateReportTemplateInfo(final Map<String,Object> filterMap){int affectNum = 0;if(filterMap.size() > 0){final String title = filterMap.get("title").toString();final String label = filterMap.get("label").toString();final Integer type = Integer.valueOf(filterMap.get("type").toString());//判断是否包含thumbnail_id 字段String strThumbnail_id ="0";if(filterMap.containsKey("thumbnail_id")){ strThumbnail_id = filterMap.get("thumbnail_id").toString();}final Integer thumbnail_id = Integer.valueOf(strThumbnail_id);final String template_content =filterMap.get("template_content").toString();final Integer id = Integer.valueOf(filterMap.get("id").toString());String sql ="update TEMPLATE_TABLE set title =?,label =?,type =?,thumbnail_id =?,template_content=? where id =?"; LobHandler handle = new DefaultLobHandler(); affectNum = this.jdbcTemplate.execute( sql, new AbstractLobCreatingPreparedStatementCallback( handle) {@Overrideprotected void setValues(PreparedStatement pStat, LobCreator lobCreator)throws SQLException, DataAccessException{ pStat.setString(1,title); pStat.setString(2,label); pStat.setInt(3, type); //判断是否包含缩略图ID,没有插入空内容 if(filterMap.containsKey("thumbnail_id")) { pStat.setInt(4, thumbnail_id); }else { pStat.setString(4,""); } lobCreator.setClobAsString(pStat,5,template_content ); pStat.setInt(6, id);} });}return affectNum > 0;}/** * @param id * @return * 删除模板信息 */public boolean deleteReportTemplateInfo(int id){String sql ="delete from TEMPLATE_TABLE where id =?";return this.jdbcTemplate.update(sql,new Object[]{id})>0;}}
相关查考文章:
利用spring的jdbcTemplate处理blob、clobspring定义了一个以统一的方式操作各种数据库的Lob类型数据的LobCreator(保存的时候用),同时提供了一个LobHandler为操作二进制字段和大文本字段提供统一接口访问。 举例,例子里面的t_post表中post_text字段是CLOB类型,而post_attach是BLOG类型:public class PostJdbcDao extends JdbcDaoSupport implements PostDao {private LobHandler lobHandler;private DataFieldMaxValueIncrementer incre;public LobHandler getLobHandler() { return lobHandler;}public void setLobHandler(LobHandler lobHandler) { this.lobHandler = lobHandler;}public void addPost(final Post post) { String sql = " INSERT INTO t_post(post_id,user_id,post_text,post_attach)" + " VALUES(?,?,?,?)"; getJdbcTemplate().execute( sql, new AbstractLobCreatingPreparedStatementCallback( this.lobHandler) { protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException { ps.setInt(1, incre.nextIntValue()); ps.setInt(2, post.getUserId()); lobCreator.setClobAsString(ps, 3, post.getPostText()); lobCreator.setBlobAsBytes(ps, 4, post.getPostAttach()); } });}}设置相对应的配置文件(Oracle 9i版本),Oracle的数据库最喜欢搞搞特别的东西啦:<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" lazy-init="true" /><bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true"> <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" /></bean><bean id="dao" abstract="true"> <property name="jdbcTemplate" ref="jdbcTemplate" /></bean><bean id="postDao" parent="dao" class="com.baobaotao.dao.jdbc.PostJdbcDao"> <property name="lobHandler" ref="oracleLobHandler" /></bean>Oracle 10g或其他数据库如下设置:<bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" /><bean id="dao" abstract="true"> <property name="jdbcTemplate" ref="jdbcTemplate" /></bean><bean id="postDao" parent="dao" class="com.baobaotao.dao.jdbc.PostJdbcDao"> <property name="lobHandler" ref="defaultLobHandler" /></bean>读取BLOB/CLOB块,举例:public List getAttachs(final int userId){ String sql = "SELECT post_id,post_attach FROM t_post where user_id =? and post_attach is not null"; return getJdbcTemplate().query( sql,new Object[] {userId}, new RowMapper() { public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Post post = new Post(); int postId = rs.getInt(1); byte[] attach = lobHandler.getBlobAsBytes(rs, 2); post.setPostId(postId); post.setPostAttach(attach); return post; } });}
0 0
- java-spring的JdbcTempldate对oracle 的CLob字段进行读和写
- 用jsp对oracle的clob字段进行操作
- 用jsp对oracle的clob字段进行操作
- 如何对CLOB字段进行全文检索和oracle中大文字量的处理
- 如何对CLOB字段进行全文检索和oracle中大文字量的处理
- 好记性不如烂笔头20-java对oracle的clob和blob字段的总结
- oracle中对clob字段的操作
- Java操纵oracle的CLOB和BLOB字段
- Oracle中对Clob字段进行Distinct
- JAVA中读取ORACLE的CLOB字段
- java操作oracle 的clob字段
- java 存储oracle的clob字段
- 对Oracle数据库的CLOB字段进行对比查询等操作
- Spring对Oracle的Clob配置
- java以流的形式写数据到Oracle的clob字段。
- Hibernate+Spring 对Oracle10g的Clob类型字段的操作
- 对clob字段的操作
- 对clob字段的处理
- 【实际项目】微信相关api调用例子【以分享为例】
- Android线程模型(Painless Threading)
- 关于iOS提交审核的IDFA-2
- 第11章 为Spring添加REST功能
- Abstract Class And Interface
- java-spring的JdbcTempldate对oracle 的CLob字段进行读和写
- java中应该尽量使用notifyall而不是notify(容易发生死锁)
- Rails表单帮助方法使用之(select)
- ld.so.conf的错误
- Forest Pack Pro(3DMax森林制作插件) v4.3.6
- oracle函数wm_concat行转列
- Hibernate搭建教程以及基础信息介绍
- CodeForces 471C
- android:descendantFocusability用法简析 item焦点问题