spring storedProcedure 使用
http://blog.csdn.net/xiao_jun_0820/article/details/7268219
StoredProcedure是一个抽象类,必须写一个子类来继承它,这个类是用来简化JDBCTemplate执行存储过程操作的。
首先我们写一个实现类:
- package com.huaye.framework.dao;
- import java.sql.Types;
- import java.util.HashMap;
- import java.util.Map;
- import org.springframework.jdbc.core.RowMapper;
- import org.springframework.jdbc.core.SqlOutParameter;
- import org.springframework.jdbc.core.SqlParameter;
- import org.springframework.jdbc.core.SqlReturnResultSet;
- import org.springframework.jdbc.object.StoredProcedure;
- /**
- * Name:StoredProcedureTemplate User: HP Date: 2007-7-21 Time: 7:40:01
- * Description:
- */
- public class StoredProcedureTemplate extends StoredProcedure {
- private HashMap<String, Object> map = new HashMap<String, Object>();
- public StoredProcedureTemplate() {
- super();
- }
- public HashMap getMap()
- {
- return this.map;
- }
- public void setValue(String key, Object obj) {
- map.put(key, obj);
- }
- public Map execute() {
- if (this.getSql() == null || this.getSql().equals(""))
- return null;
- this.compile();
- return execute(map);
- }
- public void setVarcharParam(String param) {
- this.declareParameter(new SqlParameter(param, Types.VARCHAR));
- }
- public void setDoubleParam(String param) {
- this.declareParameter(new SqlParameter(param, Types.DOUBLE));
- }
- public void setIntegerParam(String param) {
- this.declareParameter(new SqlParameter(param, Types.INTEGER));
- }
- public void setVarcharOutParam(String param) {
- this.declareParameter(new SqlOutParameter(param, Types.VARCHAR));
- }
- public void setDoubleOutParam(String param) {
- this.declareParameter(new SqlOutParameter(param, Types.DOUBLE));
- }
- public void setIntegerOutParam(String param) {
- this.declareParameter(new SqlOutParameter(param, Types.INTEGER));
- }
- public void setInParam(String param,int valueType)
- {
- this.declareParameter(new SqlParameter(param, valueType));
- }
- public void setOutParam(String param,int valueType)
- {
- this.declareParameter(new SqlOutParameter(param, valueType));
- }
- public void setReturnParam(String param, RowMapper rowMapper) {
- this.declareParameter(new SqlReturnResultSet(param,rowMapper));
- }
- }
package com.huaye.framework.dao; import java.sql.Types; import java.util.HashMap; import java.util.Map; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.SqlOutParameter; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.core.SqlReturnResultSet; import org.springframework.jdbc.object.StoredProcedure; /** * Name:StoredProcedureTemplate User: HP Date: 2007-7-21 Time: 7:40:01 * Description: */ public class StoredProcedureTemplate extends StoredProcedure { private HashMap<String, Object> map = new HashMap<String, Object>(); public StoredProcedureTemplate() { super(); } public HashMap getMap() { return this.map; } public void setValue(String key, Object obj) { map.put(key, obj); } public Map execute() { if (this.getSql() == null || this.getSql().equals("")) return null; this.compile(); return execute(map); } public void setVarcharParam(String param) { this.declareParameter(new SqlParameter(param, Types.VARCHAR)); } public void setDoubleParam(String param) { this.declareParameter(new SqlParameter(param, Types.DOUBLE)); } public void setIntegerParam(String param) { this.declareParameter(new SqlParameter(param, Types.INTEGER)); } public void setVarcharOutParam(String param) { this.declareParameter(new SqlOutParameter(param, Types.VARCHAR)); } public void setDoubleOutParam(String param) { this.declareParameter(new SqlOutParameter(param, Types.DOUBLE)); } public void setIntegerOutParam(String param) { this.declareParameter(new SqlOutParameter(param, Types.INTEGER)); } public void setInParam(String param,int valueType) { this.declareParameter(new SqlParameter(param, valueType)); } public void setOutParam(String param,int valueType) { this.declareParameter(new SqlOutParameter(param, valueType)); } public void setReturnParam(String param, RowMapper rowMapper) { this.declareParameter(new SqlReturnResultSet(param,rowMapper)); } }
写一个测试:
- public void test2() {
- ApplicationContext context = new ClassPathXmlApplicationContext(
- "classpath:spring/applicationContext-base.xml");
- JdbcTemplate jdbc = (JdbcTemplate) context.getBean("jdbcTemplate");
- StoredProcedureTemplate template = new StoredProcedureTemplate();
- template.setJdbcTemplate(jdbc);
- template.setSql("testproc");
- //注意有返回结果集的时候,第一个参数必须设置为返回结果集参数,不然会报错。
- template.setReturnParam("rows", new FirstReportRowMapper());
- template.setIntegerParam("@parama");
- template.setValue("@parama", 9);
- Map map = template.execute();
- Object o = map.get("rows");
- List<FirstReportVO> list = (List<FirstReportVO>)o;
- for (FirstReportVO vo : list) {
- System.out.println(vo.getSortID()+","+vo.getSortName());
- }
- }
public void test2() { ApplicationContext context = new ClassPathXmlApplicationContext( "classpath:spring/applicationContext-base.xml"); JdbcTemplate jdbc = (JdbcTemplate) context.getBean("jdbcTemplate"); StoredProcedureTemplate template = new StoredProcedureTemplate(); template.setJdbcTemplate(jdbc); template.setSql("testproc"); //注意有返回结果集的时候,第一个参数必须设置为返回结果集参数,不然会报错。 template.setReturnParam("rows", new FirstReportRowMapper()); template.setIntegerParam("@parama"); template.setValue("@parama", 9); Map map = template.execute(); Object o = map.get("rows"); List<FirstReportVO> list = (List<FirstReportVO>)o; for (FirstReportVO vo : list) { System.out.println(vo.getSortID()+","+vo.getSortName()); } }
唯一要注意的地方就是测试里备注的地方,我测试了好久才发现,郁闷的一塌糊涂,老是莫名其妙的错,原来将参数互换一下位置就OK了,比如你把
template.setIntegerParam("@parama");写在前面然后再写template.setReturnParam("rows", new FirstReportRowMapper());的话,就会报空指针错误。
这个“rows”可以随便取名字,不过下面map.get("rows")要和你取的名字一致,因为StoredProcedureTemplate会将结果集以这个名字保存在map中返回。
还有要注意的就是设置sqlparamter的顺序要和存储过程中参数的顺序要一致,不然也会报错.
=======
http://www.w3china.org/blog/more.asp?name=hongrui&id=5156
[java语言]spring对oracle的clob和StoredProcedure 的处理 邢红瑞 发表于 2005-4-21 9:16:20 |
|
|
spring storedProcedure 使用相关推荐
- spring访问oracle函数,spring调用带参数的oracle函数应注意的问题
spring可以方便的访问oracle的存储过程.函数. spring文档举了一个访问sysdate的例子,它不需要输入参数,使用如下: public class TestStoredProcedur ...
- Spring高级程序设计(Spring框架创始人倾情推荐的权威开发指南)
Spring高级程序设计(Spring框架创始人倾情推荐的权威开发指南) 市场价 :¥99.00 会员价 : ¥74.25(75折) 样章免费试读:http://www.china-pub.com/1 ...
- spring源码分析之spring-jdbc模块详解
0 概述 Spring将替我们完成所有使用JDBC API进行开发的单调乏味的.底层细节处理工作.下表描述了哪些是spring帮助我们做好的,哪些是我们要做的. Action Spring You ...
- Spring - Java/J2EE Application Framework 应用框架 第 10 章 使用JDBC进行数据访问
第 10 章 使用JDBC进行数据访问 10.1. 简介 Spring提供的JDBC抽象框架由core, datasource,object和support四个不同的包组成. 就和它名字的暗示一样,o ...
- 使用Spring JDBC进行数据访问 (JdbcTemplate/NamedParameterJdbcTemplate/SimpleJdbcTemplate/SimpleJdbcCall/Stor)
http://www.cnblogs.com/webcc/archive/2012/04/11/2442680.html 使用Spring JDBC进行数据访问 11.1. 简介 Spring JDB ...
- Spring 4 官方文档学习(十)数据访问之JDBC
说明:未修订版,阅读起来极度困难 1.Spring框架JDBC的介绍 Spring JDBC - who does what? 动作 Spring 你 定义连接参数 是 打开连接 是 指定SQ ...
- Spring.NET 中的 ADO.NET 数据访问的示例
Spring.NET 1.3.1 中提供了一个使用 AdoTemplate 的完整示例,包括使用泛型和使用非泛型技术进行数据访问,这个示例位于下载的压缩包中\Spring.NET-1.3.1\Spri ...
- Spring 事务传播原理及数据库事务操作原理
相关内容: 架构师系列内容:架构师学习笔记(持续更新) 先看看 Spring 事务的基础配置 <beans xmlns="http://www.springframework.org/ ...
- Spring源代码解析
我们看看Spring中的事务处理的代码,使用Spring管理事务有声明式和编程式两种方式,声明式事务处理通过AOP的实现把事物管理代码作为方面封装来横向插入到业务代码中,使得事务管理 代码和业务代码解 ...
最新文章
- PostgreSQL SystemTap on Linux 转
- ThreadLocal怎么实现线程隔离的?可见性问题?为什么要重新定义一个threadLocalHashCode?为什么有内存泄露?弱引用又是什么?
- mysql的一些初步使用!mysqlcheck mysqladmin 建立删除修改表,库,等
- 推荐阅读《赢在下班后》
- for ie无效 in js_关于js中for in的缺陷浅析
- 浅析 Sunday 算法
- 大厂必备!不断提升自己创造溢价的能力
- DCL 管理权限 mysql
- OO模式-Composite
- 精锐教育创始人张熙辞任CEO 李晓明接任
- 程序解析excel中的图片_Excel表格中链接图片操作方法,以后查看图片点点鼠标就可以了...
- ASP.NET中Http请求处理流程
- torch中permute()函数用法
- 64位操作系统安装PLSQL Developer
- 中国 vs 卡塔尔 一场幸运的比赛
- 苦口婆心一考拉|向沉迷游戏的中(大)学生讲解内存和磁盘
- 坪效是传统超市的5倍以上!京东首家线下生鲜超市7FRESH开业
- [Vmware]VCSA部署及遇到的问题
- 免费领取百度云盘2048G永久空间,永久离线下载特权
- javascript 代码获取 QQ 群成员
热门文章
- 2014/Province_Java_B/2/调和级数
- 手误【删库】 == 跑路,不存在的 ——删瓦辛格
- 《数据库原理与应用》(第三版) 第7章 索引和视图 基础 习题参考答案
- 排序算法 —— 选择排序
- 【机器视觉】 dev_set_paint算子
- 【Qt】MainWindow窗口状态栏
- 【物联网】 ESP8266 Ubuntu开发环境的搭建
- 锦州中学高考2021成绩查询,锦州高中成绩排名2021,锦州中考分数线排行榜
- 最小覆盖字串—leetcode76
- /MD, /MDD, /ML, /MT,/MTD(使用运行时库)