MYSQL 之 JDBC(十七): 调用函数&存储过程
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
MYSQL 之 JDBC(十七): 调用函数&存储过程的更多相关文章
- Java -- JDBC 学习--调用函数&存储过程
调用函数&存储过程 /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connec ...
- JDBC学习笔记(10)——调用函数&存储过程
如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个CallableStatement * 对象的实例,在使用Con ...
- 【转】JDBC学习笔记(10)——调用函数&存储过程
转自:http://www.cnblogs.com/ysw-go/ 如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个C ...
- 使用 JDBC 调用函数 & 存储过程
/** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connection connectio ...
- 基本开题的感觉是了-MySQL继续继续(自定义函数&存储过程)
hi 感觉论文开题基本确定了,凯森 1.MySQL -----自定义函数----- ----基本 两个必要条件:参数和返回值(两者没有必然联系,参数不一定有,返回一定有) 函数体:合法的SQL语句:以 ...
- MySQL 存储过程实例 与 ibatis/mybatis/hibernate/jdbc 如何调用存储过程
虽然MySQL的存储过程,一般情况下,是不会使用到的,但是在一些特殊场景中,还是有需求的.最近遇到一个sql server向mysql迁移的项目,有一些sql server的存储过程需要向mysql迁 ...
- MySQL基础之第14章 存储过程和函数
避免编写重复的语句 安全性可控 执行效率高 14.1.创建存储过程和函数 14.1.1.创建存储过程 CREATE PROCEDUREsp_name ([proc_parameter[,...]]) ...
- MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...
- MYSQL之视图、触发器、存储过程、函数、事物、数据库锁和数据库备份
一.视图 -- view 视图:是一个虚报表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据. 视图有如下特点: 1.视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系 ...
随机推荐
- 离职冷静期文件.doc
<中华人民共和国民法典>通过十三届全国人大三次会议表决,将于2021年1月1日起施行,其中#离婚冷静期#备受关注.多方人士表示,离婚冷静期设立的出发点,不是对婚姻自由的一种破坏,而是让当事 ...
- 【PHP】如何将SESSION数据存放到Redis中
在php中,SESSION的数据默认是存放到文件中,这样性能不仅不高,而且不利于扩展.在搭建集群后,默认存放到文件中就不适用了.所以,我们一般将SESSION自定义,让SESSION中的数据存放到 数 ...
- [noi.ac省选模拟赛]第11场题解集合
题目 比赛界面. T1 比较简单.容易想到是求鱼竿的最大独立集.由于题目的鱼竿可以被分割为二分图,就可以想到最大匹配. 尝试建边之后会发现边的数量不小,但联系题目性质会发现对于一条鱼竿,它 ...
- C#数据结构与算法系列(五):常见单链表笔试
1.求单链表中有效节点个数 public static int GetLength(HeroNode headNode) { int length = ; var cur = headNode.Nex ...
- BUAA_OO_2020_Unit2_总结博客
BUAA_OO_2020_Unit2_总结 2020年春季学期第八周,OO第二单元落下帷幕,三次多线程任务作罢,萌新在OO的世界里又迈出了艰难但有意义的一步,下作总结: 一.三次作业设计策略 回顾三次 ...
- Android学习笔记基于监听的事件处理
事件处理流程 代码格式: Button btn1 = findViewById(R.id.btn1); btn1.setOnClickListener(new View.OnClickListener ...
- opencv3.1.0 计算机中丢失 opencv_world310d.dll _vs2017解决方法
---------------------------opencv1.exe - 系统错误---------------------------无法启动此程序,因为计算机中丢失 opencv_worl ...
- Linux 进程间通信(IPC)总结
概述 一个大型的应用系统,往往需要众多进程协作,进程(Linux进程概念见附1)间通信的重要性显而易见.本系列文章阐述了 Linux 环境下的几种主要进程间通信手段. 进程隔离 进程隔离是为保护操作系 ...
- 运行 docker .... 命令报错
一.检查 Linux 上是有存在 docker [root@localhost bin]# docker version 不存在 docker 时,可以使用如下命令下载 docker [root@lo ...
- Kali中密码暴力破解工具hydra的使用
前言 hydra是著名黑客组织thc的一款开源的暴力破解密码工具,功能非常强大,kali下是默认安装的,几乎支持所有协议的在线破解.密码能否破解,在于字典是否强大.本文仅从安全角度去讲解工具的使用,请 ...