Spring如何使用JdbcTemplate调用存储过程的三种情况
* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* @author Alan
* @Email no008@foxmail.com
正文
注:原文 《Spring如何使用JdbcTemplate调用存储过程的三种情况 》
Spring的SimpleJdbcTemplate将存储过程的调用进行了良好的封装,下面列出使用JdbcTemplate调用Oracle存储过程的三种情况:
一、无返回值的存储过程调用
1、存储过程代码:
2、JdbcTemplate调用该存储过程代码:
1 package com.dragon.test; 2 import org.springframework.jdbc.core.JdbcTemplate; 3 public class JdbcTemplateTest { 4 private JdbcTemplate jdbcTemplate; 5 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 6 this.jdbcTemplate = jdbcTemplate; 7 } 8 public void test(){ 9 this.jdbcTemplate.execute("call sp_insert_table('100001')"); 10 } 11 }
二、有返回值的存储过程(非结果集)
1、存储过程代码:
2、JdbcTemplate调用该存储过程代码:
1 public void test() { 2 String param2Value = (String) jdbcTemplate.execute( 3 new CallableStatementCreator() { 4 public CallableStatement createCallableStatement(Connection con) throws SQLException { 5 String storedProc = "{call sp_select_table (?,?)}";// 调用的sql 6 CallableStatement cs = con.prepareCall(storedProc); 7 cs.setString(1, "p1");// 设置输入参数的值 8 cs.registerOutParameter(2,OracleTypes.Varchar);// 注册输出参数的类型 9 return cs; 10 } 11 }, new CallableStatementCallback() { 12 public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { 13 cs.execute(); 14 return cs.getString(2);// 获取输出参数的值 15 } 16 }); 17 }
三、有返回值的存储过程(结果集)
1、存储过程代码
先创建程序包,因为Oracle存储过程所有返回值都是通过out参数返回的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用package:
存储过程代码:可以看到,列表是通过把游标作为一个out参数来返回的。
2、JdbcTemplate调用该存储过程代码:
1 public void test() { 2 List resultList = (List) jdbcTemplate.execute( 3 new CallableStatementCreator() { 4 public CallableStatement createCallableStatement(Connection con) throws SQLException { 5 String storedProc = "{call sp_list_table(?,?)}";// 调用的sql 6 CallableStatement cs = con.prepareCall(storedProc); 7 cs.setString(1, "p1");// 设置输入参数的值 8 cs.registerOutParameter(2, OracleTypes.CURSOR);// 注册输出参数的类型 9 return cs; 10 } 11 }, new CallableStatementCallback() { 12 public Object doInCallableStatement(CallableStatement cs) throws SQLException,DataAccessException { 13 List resultsMap = new ArrayList(); 14 cs.execute(); 15 ResultSet rs = (ResultSet) cs.getObject(2);// 获取游标一行的值 16 while (rs.next()) {// 转换每行的返回值到Map中 17 Map rowMap = new HashMap(); 18 rowMap.put("id", rs.getString("id")); 19 rowMap.put("name", rs.getString("name")); 20 resultsMap.add(rowMap); 21 } 22 rs.close(); 23 return resultsMap; 24 } 25 }); 26 for (int i = 0; i < resultList.size(); i++) { 27 Map rowMap = (Map) resultList.get(i); 28 String id = rowMap.get("id").toString(); 29 String name = rowMap.get("name").toString(); 30 System.out.println("id=" + id + ";name=" + name); 31 } 32 }
——————————————————————————————————————————————————————————————————————————————————————
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
态度:道阻且长,行则将至;行而不辍,未来可期
.....................................................................
------- 桃之夭夭,灼灼其华。之子于归,宜其室家。 ---------------
------- 桃之夭夭,有蕡其实。之子于归,宜其家室。 ---------------
------- 桃之夭夭,其叶蓁蓁。之子于归,宜其家人。 ---------------
=====================================================================
* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。 * @author Alan -liu * @Email no008@foxmail.com
转载请标注出处! ✧*꧁一品堂.技术学习笔记꧂*✧. ---> https://www.cnblogs.com/ios9/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?