`
xurichusheng
  • 浏览: 344779 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用Spring的JdbcTemplate处理Clob

阅读更多

1. 数据库表 req_seq

 

CREATE TABLE req_seq
(
req_id VARCHAR2(36) PRIMARY KEY,
seq VARCHAR2(100),
req_xml CLOB,
req_time DATE
);

 

2. 实体类

 

import java.io.Serializable;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;

public class ReqSeqBean implements Serializable {

	/**
	 * @Fields serialVersionUID : TODO
	 */
	private static final long serialVersionUID = -4200518336372141644L;

	// 主键
	private String reqId;
	// 请求序列
	private String req;
	// 请求XML
	private String reqXml;
	// 请求时间
	private Timestamp reqTime;
	
	public String toString() {
		
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
		StringBuffer buf = new StringBuffer("ReqSeqBean:[");
		
		buf.append("reqId=").append(reqId).append(", ");
		buf.append("req=").append(req).append(", ");
		buf.append("reqXml=").append(reqXml).append(", ");
		buf.append("reqTime=").append(df.format(reqTime));
		
		return buf.toString();
	}

	// 省略 setter/getter
}

 

 

注意: 数据库表中,REQ_XML 的类型是 CLOB,实体类中是 String

 

3. DAO层配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<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="reqSeqDAO" class="com.dao.ReqSeqDAO">
		<property name="jdbcTemplate" ref="jdbcTemplate" />
		<property name="hisJdbcTemplate" ref="jdbcTemplate" />
		<property name="lobHandler" ref="oracleLobHandler"/>
	</bean>
</beans>

 

4. DAO

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback;
import org.springframework.jdbc.support.lob.LobCreator;
import org.springframework.jdbc.support.lob.LobHandler;

public class ReqSeqDAO extends BaseDao {

	private static final Logger log = LoggerFactory.getLogger(ReqSeqDAO.class);

	private LobHandler lobHandler;

	/**
	 * @Title: addReqSeq
	 * @deprecated: 如果字段REQ_XML是clob类型,则用此方法,但是需要oracle版本和jdk版本一致
	 * @param bean
	 * @throws Exception
	 * @author 
	 * @date 2013年10月23日
	 */
	public void addReqSeq(final ReqSeqBean bean) throws Exception {

		StringBuffer sql = new StringBuffer();

		sql.append("INSERT INTO REQ_SEQ(REQ_ID, SEQ, REQ_XML, REQ_TIME) ");
		sql.append("VALUES(SYS_GUID(), ?, ?, ");
		sql.append("TO_DATE(TO_CHAR(SYSDATE,'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd hh24:mi:ss'))");

		getJdbcTemplate().execute(sql.toString(),
				new AbstractLobCreatingPreparedStatementCallback(lobHandler) {

					@Override
					protected void setValues(PreparedStatement ps,
							LobCreator lobCreator) throws SQLException,
							DataAccessException {
						ps.setString(1, bean.getReq());
						lobCreator.setClobAsString(ps, 2, bean.getReqXml());
					}
				});
	}

	/**
	 * @Title: queryReqSeqList
	 * @deprecated: 按条件查找请求序列信息(如果字段REQ_XML是clob类型,则用此方法,但是需要oracle版本和jdk版本一致)
	 * @param bean
	 *            查询条件
	 * @return List
	 * @throws Exception
	 * @author 
	 * @date 2013年10月23日
	 */
	public List<ReqSeqBean> queryReqSeqList(ReqSeqBean bean) throws Exception {

		StringBuffer sql = new StringBuffer(
				"SELECT * FROM REQ_SEQ WHERE 1 = 1 ");

		// 查询条件
		List<String> params = new ArrayList<String>(1);

		if (null != bean) {
			/* 添加查询条件 */
			if (null != bean.getReq()) {
				// 请求序列号
				sql.append(" AND SEQ = ? ");
				params.add(bean.getReq());
			}
		}

		sql.append(" ORDER BY REQ_TIME DESC");

		final List<ReqSeqBean> list = new ArrayList<ReqSeqBean>(10);

		getJdbcTemplate().query(sql.toString(), params.toArray(),
				new RowMapper() {

					@Override
					public Object mapRow(ResultSet rs, int rowNum)
							throws SQLException {

						ReqSeqBean seq = new ReqSeqBean();

						seq.setReqId(rs.getString("REQ_ID"));
						seq.setReq(rs.getString("SEQ"));
						seq.setReqXml(lobHandler.getClobAsString(rs,
								"REQ_XML"));
						seq.setReqTime(rs.getTimestamp("REQ_TIME"));

						list.add(seq);

						return seq;
					}
				});

		return list;
	}

	public LobHandler getLobHandler() {
		return lobHandler;
	}

	public void setLobHandler(LobHandler lobHandler) {
		this.lobHandler = lobHandler;
	}
}

 

 

分享到:
评论

相关推荐

    利用spring的jdbcTemplate处理blob、clob

    spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。

    spring2通过jdbc的方式读取、更新数据库的clob或者blob类型的数据

    这篇博客主要探讨了如何使用Spring处理CLOB(Character Large Object)和BLOB(Binary Large Object)这两种大数据类型的字段。CLOB通常用于存储大文本数据,如文章、报告等,而BLOB则用于存储二进制大数据,如图片...

    Spring中文帮助文档

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

    spring blob相关

    以下是一个简单的示例,展示了如何使用Spring的JdbcTemplate来操作Oracle的BLOB字段: ```java @Autowired private JdbcTemplate jdbcTemplate; public void insertBlob(String tableName, Blob blobData) { ...

    JdbcTemplate文件

    在实际项目中,JdbcTemplate通常与其他Spring组件结合使用,如DataSourceTransactionManager进行事务管理,或者与Hibernate、MyBatis等ORM框架协同工作,提供更加灵活的数据库访问策略。它还可以与Spring的AOP(面向...

    简单易行:Spring中操作LOB字段案例

    总结起来,本文通过一个简单的Spring案例展示了如何操作LOB字段,包括创建DAO方法,使用`JdbcTemplate`进行数据库操作,以及在Web应用中处理文件上传。同时,我们也了解了如何配置Spring的`JdbcTemplate`和数据库...

    Spring.3.x企业应用开发实战(完整版).part2

    经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...

    Spring API

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

    Spring3.x企业应用开发实战(完整版) part1

    经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...

    Apress.Spring.Persistence – A.Running.Start.Feb.2009.pdf

    - **二进制数据处理**:探讨了Spring JDBC中处理二进制数据的方法,如BLOB和CLOB类型。 - **其他JdbcTemplate实现**:概述了除了默认的JdbcTemplate之外,还有哪些其他的实现可供选择。 ### 第三章:使用Spring与...

    spring-framework-reference-4.1.2

    3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................

    DBKING使用指南

     这类工具已经很多了,比如大家耳熟能详的Hibernate、iBatis,包括Apache的DBUtils、Spring的JdbcTemplate。为什么我们还要推出db-unifier这样一个功能类似的东西呢?  这些工具的主要目的都是对JDBC进行包装...

    java_学习资料

    - **Blob/clob映射**:处理大文本和二进制数据。 - **查询(get, load, 延迟加载)**:获取对象的不同方式及其特点。 - **Session的常用方法**:如`save()`、`update()`、`delete()`等。 - **对象在Hibernate中的...

    spring-framework-reference4.1.4

    3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................

    java jdbc 反射 word学习文档

    `JdbcTemplate`是Spring框架中用于简化JDBC编程的一种工具,它封装了大量的通用数据库操作。 - **模板设计模式优化DAO**: `JdbcTemplate`简化了异常处理、资源管理等操作。 - **策略设计模式优化DAO**: 通过定义...

Global site tag (gtag.js) - Google Analytics