`
lighter
  • 浏览: 501027 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用jdbcTempate调用存储过程,处理BLOB/CLOB小记

阅读更多
1、利用spring的jdbcTemplate调用存储过程
假如我们有P_GET_TOPIC_NUM这一个存储过程,有两个参数,第一个参数userId是传进去的,第二个参数是传出来的,举例如下:

	public int getUserTopicNum(final int userId) {
		String sql = "{call P_GET_TOPIC_NUM(?,?)}";
		//使用	Object execute(String callString, CallableStatementCallback action)接口
		Object obj = getJdbcTemplate().execute(sql,new CallableStatementCallback(){
			public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
				cs.setInt(1,userId);
				cs.registerOutParameter(2, Types.INTEGER);
				cs.execute();
				return new Integer(cs.getInt(2));
			}	
		});
	    return ((Integer)obj).intValue();
	}



2、spring定义了一个以统一的方式操作各种数据库的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;
				    }
			    });
	}



注:代码均来自<<精通spring2.x企业应用开发详解>>
分享到:
评论

相关推荐

    利用spring的jdbcTemplate处理blob、clob

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

    Mybatis 处理 CLOB、BLOB 类型数据

    Mybatis 处理 CLOB、BLOB 类型数据 MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis ...通过使用 MyBatis 处理 CLOB 和 BLOB 类型数据,可以方便地存储和读取大字段类型的数据,提高应用程序的性能和可扩展性。

    JDBC中操作Blob、Clob等对象

    ### JDBC中操作Blob、Clob等对象 #### 一、简介 在JDBC(Java Database Connectivity)编程中,Blob和Clob是非常重要的数据类型。Blob(Binary Large Object)主要用于存储二进制大对象,如图像、音频文件等;而Clob...

    CLOB、BLOB___CLOB与BLOB的区别

    CLOB 的优点是可以存储大量的字符数据,并且可以使用字符串操作来处理 CLOB 数据。 BLOB(Binary Large OBject)是另一种数据库类型,用于存储二进制大对象。它是一个大文件,典型的 BLOB 是一张图片或一个声音文件...

    oracle Blob转换Clob

    ### Oracle Blob转换Clob ...通过以上内容的学习,可以了解到如何在Oracle数据库中实现Blob到Clob的转换过程,以及相关的注意事项和技术细节。这对于处理大数据量下的不同类型数据转换具有重要意义。

    BLOB和CLOB的区别以及在ORALCE中的插入和查询操作

    在数据库管理领域,BLOB(Binary Large Object)和CLOB(Character Large Object)是两种用于存储大量非结构化数据的数据类型。它们都是Oracle数据库中重要的字段类型,用于处理大数据量的文本或二进制文件。了解...

    oracle(blob转换为clob)

    在某些情况下,可能需要将BLOB类型的数据转换为CLOB类型,例如,在处理文本数据时,如果数据被错误地存储为BLOB,或者需要将二进制数据中的可读文本部分提取出来进行处理。本文将详细介绍如何使用Oracle内置函数和...

    Blob和Clob使用例子

    在Hibernate,一个流行的Java对象关系映射(ORM)框架中,Blob和Clob也被广泛使用,特别是在处理大型图片、文件或长文本时。 在Hibernate和Microsoft SQL Server的环境中,Blob常用来存储图像、音频、视频等二进制...

    hibernate保存blob,clob对象

    在Java的持久化框架Hibernate中,处理大数据类型如BLOB(Binary Large Object)和CLOB(Character Large Object)是一项常见的任务。BLOB用于存储二进制数据,如图片、视频或文档,而CLOB则用于存储大文本数据,如...

    jdbc_blob_clob.rar

    标题“jdbc_blob_clob.rar”暗示了这个压缩包文件包含的内容与Java Database Connectivity (JDBC) 中处理Blob和Clob对象相关的知识。Blob是Binary Large Object的缩写,用于存储大块二进制数据,如图片、音频或视频...

    Hibernate对Blob,Clob的操作

    Blob和Clob是Java中用于处理大数据类型的数据对象,Blob用于存储二进制大对象,如图片、音频或视频,而Clob则用于存储字符大对象,如长文本。本文将详细介绍如何在Hibernate中操作Blob和Clob字段,实现数据的存储与...

    oracle中的Blob和Clob区别

    在Oracle数据库中,`BLOB`(Binary Large Object)和`CLOB`(Character Large Object)是用于存储大量数据的两种特殊数据类型。这两种类型都属于`LOB`(Large Object)类别,主要用于处理大数据量的存储问题。 ####...

    Oracle8i对Blob和Clob类型的操作

    在实际应用中,还需要注意LOB数据的存储策略、性能优化以及内存管理,例如使用临时表空间处理大型LOB数据,避免在事务中处理过多的LOB操作,以及合理设置LOB缓存大小。 通过以上内容,我们可以看到Oracle8i对BLOB和...

    使用Jdbc4操作Blob,Clob

    这篇博客“使用Jdbc4操作Blob,Clob”将深入讲解如何利用JDBC4 API来处理Blob和Clob对象。 Blob通常用于存储二进制数据,如图片、音频或视频文件,而Clob则用于存储大量文本数据,如长篇的文本或XML文档。在JDBC4中...

    如何将DB2数据库中的大对象(BLOB,CLOB)数据类型复制到Oracle数据库中

    在数据库迁移或数据同步的过程中,有时需要将含有大对象(LOB,包括BLOB和CLOB)的数据从一个数据库系统复制到另一个不完全支持LOB的数据库系统。本例中,我们讨论如何将DB2数据库中的BLOB数据类型复制到Oracle...

    DELPHI的CLOB和BLOB存取处理.zip_DELPHI的CLOB和BLOB存取处理_hallzgz

    在数据库编程领域,CLOB(Character Large Object)和BLOB(Binary Large Object)是用于存储大量文本和二进制数据的数据类型。在DELPHI中,处理这些大型对象时需要特殊的技术和策略。本篇文章将深入探讨DELPHI中...

    Hibernate对BLOB CLOB操作

    在Java的持久化框架Hibernate中,BLOB和CLOB是用来处理大数据对象(Binary Large Object和Character Large Object)的。这两个类型常用于存储图像、视频、大文本等数据,因为它们可以容纳超过数据库标准列大小限制的...

Global site tag (gtag.js) - Google Analytics