相关介绍-

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* 说明:模板*/
@Repository
public 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;}});
}

java-spring的JdbcTempldate对oracle 的CLob字段进行读和写相关推荐

  1. java Clob转CLOB_Java获取Oracle中CLOB字段转换成String

    Java获取Oracle中CLOB字段转换成String : try {PreparedStatement stmt = session.connection().prepareStatement(s ...

  2. mysql clob转string_Java获取Oracle中CLOB字段转换成String

    Java获取Oracle中CLOB字段转换成String : try {PreparedStatement stmt = session.connection().prepareStatement(s ...

  3. Mysql 查询blob数据很慢,关于oracle中clob字段查询慢的问题及解决方法

    关于oracle中clob字段查询慢的问题及解决方法 最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了. blob字段直 ...

  4. java 写oracle clob_Java将数据写入Oracle的Clob字段中

    ---------------------将大量数据写入Clob字段中------------- 一.得到连接 def dbDriver = "oracle.jdbc.driver.Orac ...

  5. oracle.sql.clob 报错,oracle11g java导出excel报错oracle.sql.CLOB@xxxx问题

    在项目中遇到,生产导出excel报错的问题 oracle.sql.CLOB@xxxx的错误,测试导出没问题,一样的代码. 原来oracle数据库从10g以后,使用wm_concat,函数返回值会自动转 ...

  6. jdbc获取clob图片_jdbc方式读取oracle的clob字段实例

    可能大家也都习惯了spring和hibernate对CLOB字段的处理,在spring中配置clob的oracle处理句柄,在hibernate中配置映射类型,然后就可以很轻松的以String 的形式 ...

  7. clob mybatis_mybatis 解决Druid设置Oracle的Clob字段时的小坑详解

    http://blog.csdn.net/renfufei/article/details/44887371 mybatis 插入读取clob类型,之前使用类型转换器的方式,但是不好使,不能读取, j ...

  8. JSTL+EL表达式方法获取Oracle的Clob字段内容

    我们在页面获得数据的时候一般的类型还是很好获得的,但是一遇到Clob类型就比较麻烦,最常用的方法是用一个流将其读取出来.使用MVC框架的时候这些都是无所谓的事情,因为反正是写在java类中怎么写都行, ...

  9. oracle的clob字段导致线上应用无响应问题及解决

    项目中有一张日志表,里面有个clob字段,专门用来保存定时任务的执行日志,上线已经一年多了,一直用的好好的,前两天突然发现有个任务的日志查询不出来了,界面上一直处于卡死状态,而且系统开始报警,资源占用 ...

最新文章

  1. 简单探讨JavaScript 与 TypeScript之间的联系
  2. 2021年Kaggle所有赛事TOP方案汇总
  3. SAP Hybris里搜索显示结果的实现原理
  4. SAP IBASE father component的创建
  5. java框架概念_java概念(2)
  6. python怎么变各种颜色_python – 如何淡化颜色
  7. 《数据结构》双链循环线性表
  8. java创新_Java没有创新了吗?Java 13提供可提高生产率和效率的功能
  9. empty variable name
  10. Common Lisp之Slime函数调用快捷键(三)
  11. [简单]1.宝石和石头
  12. MySQL(14)-----运算符和优先级
  13. Chrome谷歌浏览器无法自动同步的解决办法
  14. 分割视频的方法有哪些?
  15. iPhone清理工具:4Easysoft iPhone Cleaner for Mac
  16. 课程笔记《碳中和产业报告》
  17. 微信小程序----布局适配与物理逻辑像素
  18. 处理Whitelabel Error Page
  19. exit()和_exit()
  20. string转wchar_t*和QString转wchar_t*

热门文章

  1. 计算机科学家 本科专业,纽芬兰纪念大学计算机科学本科专业介绍及课程设置...
  2. Spring Boot中的配置文件使用以及重新加载
  3. 大数据扫黄,是怎样发现你的?
  4. 说说Redis的常用应用场景
  5. integer conversion resulted in a change of sign
  6. Linux -- snmp v3开通、认证、加密及其他
  7. 欠债还钱,天经地义(二)
  8. UE4 LOD Screen Size
  9. 进击高手【第五期】思维题
  10. 《人生的智慧》——人所拥有的财产