JDBC(13)—JDBC调用存储过程和函数
步骤:
JDBC调用存储过程和函数
步骤:①:通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例,在使用Connection对象的preparedCall()方法时,需要传入一个String类型的字符串,该字符串指明如何调用存储过程。
函数: [? = call [(,, … )]]
存储过程: [call [(,, … )]]②:通过CallableStatement对象reisterOutParameter方法注册OUT参数
③:通过CallableStatement对象setXxx()方法设定IN或IN OUT参数,若想把参数设为null,使用setNull()方法
④:通过CallableStatement对象的execute()方法执行存储过程。
⑤:如果调用的是带返回值的存储过程,还需要CallableStatement对象的getXxx()方法获取其返回值。
注:通过数据字典查看存储过程或函数的定义。
2 .示例代码
java调用存储过程
/**
* 调用存储过程
*/
@Test
public void testCallableStatement(){
Connection conn = null;
CallableStatement callablestatement = null;
try {
conn = TestTools.getConnection();
String sql = "{ call add0 (?, ?, ?) }";
//1.获取CallableStatement类是对象
callablestatement = conn.prepareCall(sql);
//2.注册OUT参数
callablestatement.registerOutParameter(3, Types.NUMERIC);
//3.通过setXxx()方法设定IN或OUT参数值
callablestatement.setInt(1, 10);
callablestatement.setInt(2, 20);
//4.执行存储过程
callablestatement.execute();
//5.若有返回值,需要使用getXxx()接收
int sum = callablestatement.getInt(3);
System.out.println("结果:"+sum);//结果:30
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(callablestatement, conn);
}
}
创建存储过程的SQL语句
#定义有返回值的存储过程,大小写无所谓,功能:计算两个数的值
#注意:过程名不能使用add
CREATE PROCEDURE add0(IN a INT,IN b INT,OUT result INT)
BEGIN
IF a IS NULL THEN SET a = 0;
END IF;
IF b IS NULL THEN SET b = 0;
END IF;
SET result = a + b;
SELECT result AS SUM;
END;
#调用存储过程
call add0 (10, 20, @result);
##定义无返回值的存储过程,大小写无所谓,功能:计算两个数的值
CREATE PROCEDURE add1( a INT, b INT)
BEGIN
DECLARE result INT;
IF a IS NULL THEN SET a = 0;
END IF;
IF b IS NULL THEN SET b = 0;
END IF;
SET result = a + b;
SELECT result AS SUM;
END;
#调用存储过程
call add1 (10, 20);
java调用函数
/**
* 调用函数
*/
@Test
public void testCallableStatement1(){
Connection conn = null;
CallableStatement callablestatement = null;
try {
conn = TestTools.getConnection();
String sql = "{? = call add_fun (?, ?) }";
//1.获取CallableStatement类是对象
callablestatement = conn.prepareCall(sql);
//2.注册OUT参数,其中1表示第一个问号,表示输出
callablestatement.registerOutParameter(1, Types.NUMERIC);
//3.通过setXxx()方法设定IN或OUT参数值,2,3表示第二个和第三个问号,表述输入。
callablestatement.setInt(2, 10);
callablestatement.setInt(3, 20);
//4.执行存储过程
callablestatement.execute();
//5.若有返回值,需要使用getXxx()接收
int sum = callablestatement.getInt(1);
System.out.println("结果:"+sum);
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(callablestatement, conn);
}
}
创建函数的mysql语句:
#创建有返回值的函数,注意分号不要少
create function add_fun(a int, b int)
returns int
begin
declare c int;
set c = a + b;
return c;
end;
#调用函数
select add_fun(10,10) as sum
JDBC(13)—JDBC调用存储过程和函数的更多相关文章
- Java 调用存储过程、函数
一.Java调用存储Oracle存储过程 测试用表: --创建用户表 create table USERINFO ( username ) not null, password ) not null ...
- 转:EF调用存储过程、函数
EF调用存储过程.函数 2014-04-02 09:12:20| 分类: ORM框架|举报|字号 订阅 一.ef4.1 codeFirst 修改表结构 增加字段等 EF code ...
- MySQL学习笔记:调用存储过程或函数报1418错误
问题 MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DE ...
- JDBC第二篇--【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 1.PreparedStatement对象 PreparedState ...
- JDBC【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
1.PreparedStatement对象 PreparedStatement对象继承Statement对象,它比Statement对象更强大,使用起来更简单 Statement对象编译SQL语句时, ...
- jdbc调用存储过程和函数
1.调用存储过程 public class CallOracleProc { public static void main(String[] args) throws Exception{ Stri ...
- 【转】java调用存储过程和函数
一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...
- MyBatis中调用存储过程和函数
一.调用存储过程 1.首先在数据库中定义存储过程,定义的存储过程的代码如下: //定义存储过程 create or replace procedure pag_add(p1 varchar2,p2 v ...
- MySQL存储过程和自定义函数、Navicat for mysql、创建存储过程和函数、调用存储过程和函数的区别
1 MySQL存储过程和函数 过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快. 1.1 存储过程 存储 ...
随机推荐
- 【Android】Tips for Android developer: “Conversion to Dalvik format failed: Unable to execute dex: null”
Androiddeveloper, I have met a strange problem when I want use a third party jar, it remained me tha ...
- 【Android】setHapticFeedbackEnabled 设置
使其在触摸的时候没有触感反馈.接着设置长按事件的监听. 代码在:launcher launcher->setupViews方法 // Setup the workspacemWorkspace. ...
- net core体系-web应用程序-4net core2.0大白话带你入门-2asp.net core新建项目
新建asp.net core项目 开发环境:Windows Server R2 2008 开发工具:Microsoft Visual Studio 2017 新建asp.net core项目 创建 ...
- Codeforces Gym100187C Very Spacious Office 贪心 堆
原文链接https://www.cnblogs.com/zhouzhendong/p/CF-Gym100187C.html 题目传送门 - CF-Gym100187C 题意 给定 $n$ 个房间以及 ...
- idea配置web项目启动的详细说明
每次用完一个编辑器以后 ,再换另一个编辑器使用 过段时间再回来使用idea,总是会忘记些什么 ,毕竟每个编辑器的风格和结构都有所区别 特此记下笔记 方便以后查看 图片文字看不清的 请在图片上 ...
- mysql group_concat时间用法
第一张表的worksId在第二张表中对应多条数据,需要将每条数据的日期作为结果查询出来,一个作为“初审时间”,另一个作为“复审时间”: 可以使用group_concat 和 group by 来进行分 ...
- POJ 1056 IMMEDIATE DECODABILITY 【Trie树】
<题目链接> 题目大意:给你几段只包含0,1的序列,判断这几段序列中,是否存在至少一段序列是另一段序列的前缀. 解题分析: Trie树水题,只需要在每次插入字符串,并且在Trie树上创建节 ...
- css布局方式总结
### 居中布局 ### 一.水平居中 * 要求:子元素于父元素水平居中且其(子元素与父元素)宽度均可变. ```` javacript <div class="parent" ...
- springmvc controller动态设置content-type
springmvc RequestMappingHandlerAdapter#invokeHandlerMethod 通过ServletInvocableHandlerMethod#invokeAn ...
- 自定义sshd服务
1.安装rsyslog服务和sshd服务并启动 2.配置日志文件 vim /etc/rsyslog.conf 在里面添加一行 local*. /var/log/sshd.lo ...