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