1.通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例。在使用Connection对象的preparedCall()方法时,需要传入一个String类型的字符串,该字符串用于指明如何调用存储过程。(注意:函数名不需要带<>,同理传参也不用[],不能理解的话看例子,不然会报错)

{?= call <procedure-name> [(<arg1>, <arg2>, ...)]}
call <procedure-name> [(<arg1>, <arg2>, ...)]}

2通过CallableStatement对象的registerOutParameter()方法注册OUT参数

3通过CallableStatement对象的setXxx()方法设定IN或IN OUT参数

若想将参数默认值设为null,可以使用setNull()方法

4通过CallableStatement对象的execute()方法执行存储过程

5如果所调用的是带返回参数的存储过程,还需要通过CallableStatement对象的getXxx()方法获取其返回值

通过数据字典查看存储过程或函数的定义:select text from user_source where lower(name) = 'add_sal_procedure;'

实验

  • 我自己写了一个函数

create function sum_salary(name varchar(20), i int) returns varchar(20)
begin
declare result int default 0;
declare r varchar(20) default 'aaa'; select count(*) into result from t_user where username=name and i = id;
select if(result>0, '成功!', '失败!') into r;
return r;
end;

这个函数在idea中显示的是

create
definer = root@localhost function sum_salary(name varchar(20), i int) returns varchar(20)
begin
declare result int default 0;
declare r varchar(20) default 'aaa'; select count(*) into result from t_user where username=name and i = id;
select if(result>0, '成功!', '失败!') into r;
return r;
end;

函数的功能是输入用户名和id,查看是否有这个人,测试如下

package com.litian.jdbc;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types; /**
* @author: Li Tian
* @contact: litian_cup@163.com
* @software: IntelliJ IDEA
* @file: TestCalllableStatement.java
* @time: 2020/4/8 12:14
* @desc: |如何使用JDBC调用存储在数据库中的函数或存储过程
*/ public class TestCalllableStatement {
public static void main(String[] args){
Connection conn = null;
CallableStatement cs = null;
try {
conn = JDBCTools.getDSConnection(); // 1. 通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例。
String sql = "{?= call sum_salary (?, ?)}";
cs = conn.prepareCall(sql); // 2. 通过CallableStatement对象的registerOutParameter()方法注册OUT参数
cs.registerOutParameter(1, Types.VARCHAR);
// 3. 通过CallableStatement对象的setXxx()方法设定IN或IN OUT参数
cs.setString(2, "你大爷");
cs.setInt(3, 3);
// 4. 执行存储过程
cs.execute();
// 5. 获取返回值
String result = cs.getString(1);
System.out.println(result); } catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.release(null, cs, conn);
}
}
}

结果直接输出返回值!实验成功!

————————————————
版权声明:本文为CSDN博主「李英俊小朋友」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21579045/article/details/105386353

最新文章

  1. 烂泥:高负载均衡学习haproxy之TCP应用
  2. C++调试技巧
  3. BUTTON标签和INPUT标签的区别【转】
  4. git deployment strategy
  5. 使用Spring Session做分布式会话管理
  6. ListView真的蛮好用
  7. SQL Server 批量插入数据的两种方法(转)
  8. 如何防范CC攻击
  9. JavaScript对象原型写法区别
  10. springboot 1.5.2 thymeleaf 添加templates 静态资源访问路径
  11. Java NIO (一) 初识NIO
  12. JDK、JRE和JVM的关系
  13. Java 读书笔记 (十一) Number &amp; Math 类
  14. awk小例子_1_逆序排列
  15. 【CQOI2017】小Q的表格
  16. ASP.NET MVC动态加载数据
  17. React中props和state相同点和不同点
  18. c# 根据当前时间获取,本周,本月,本季度,月初,月末,各个时间段
  19. 9.28 Django博客项目(一)
  20. ARM汇编关键知识点总结(转)

热门文章

  1. ASP.NET Core Blazor WebAssembly 之 .NET JavaScript互调
  2. Vue结合路由配置递归实现菜单栏
  3. 利用requets库采集蘑菇租房网的租房信息
  4. &lt;react&gt; 组件的详细介绍:
  5. 在Java虚拟机上班是一种怎样的体验?
  6. 提交代码到gitbub.com
  7. Meteva——让预报检验不再重复造轮子
  8. Vue基础篇 (1) —— Vue-Router的使用
  9. win中mysql安装
  10. 初探RabbitMQ消息队列