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(十七): 调用函数&存储过程的更多相关文章

  1. Java -- JDBC 学习--调用函数&存储过程

    调用函数&存储过程 /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connec ...

  2. JDBC学习笔记(10)——调用函数&存储过程

    如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个CallableStatement *    对象的实例,在使用Con ...

  3. 【转】JDBC学习笔记(10)——调用函数&存储过程

    转自:http://www.cnblogs.com/ysw-go/ 如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个C ...

  4. 使用 JDBC 调用函数 & 存储过程

    /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connection connectio ...

  5. 基本开题的感觉是了-MySQL继续继续(自定义函数&存储过程)

    hi 感觉论文开题基本确定了,凯森 1.MySQL -----自定义函数----- ----基本 两个必要条件:参数和返回值(两者没有必然联系,参数不一定有,返回一定有) 函数体:合法的SQL语句:以 ...

  6. MySQL 存储过程实例 与 ibatis/mybatis/hibernate/jdbc 如何调用存储过程

    虽然MySQL的存储过程,一般情况下,是不会使用到的,但是在一些特殊场景中,还是有需求的.最近遇到一个sql server向mysql迁移的项目,有一些sql server的存储过程需要向mysql迁 ...

  7. MySQL基础之第14章 存储过程和函数

    避免编写重复的语句 安全性可控 执行效率高 14.1.创建存储过程和函数 14.1.1.创建存储过程 CREATE PROCEDUREsp_name ([proc_parameter[,...]]) ...

  8. MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁

    浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...

  9. MYSQL之视图、触发器、存储过程、函数、事物、数据库锁和数据库备份

    一.视图 -- view 视图:是一个虚报表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据. 视图有如下特点: 1.视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系 ...

随机推荐

  1. Php7安装pdo_pgsql,pgsql扩展

    通过地址http://pecl.php.net/package/PDO_PGSQL下载PDO扩展包 找到php自带的ext目录里的pgsql库 第二步: 切换目录到pgsql 第三步: 找到phpiz ...

  2. @topcoder - SRM603D1L3@ SumOfArrays

    目录 @desription@ @solution@ @accepted code@ @details@ @desription@ 给定两个长度为 n 的数列 A, B.现你可以将两数列重排列,然后对 ...

  3. Unit4-窝窝之昆崚

    全文共3012字,推荐阅读时间10~15分钟. 文章共分五个部分: 作业分析 烘烤OO的精华 评测相关 课程体验感受 一些小小的建议 作业分析 Unit4要求我们实现UML解析器,迭代过程主要是增加对 ...

  4. QTabWidget 中 关于Tab 关闭和添加的基本教程!

    QTabWidget是PyQt5 中使用较为广泛的容器之一,经常会在日常使用的软件中用到它:QTabwidget是由几个标签组成,每个标签可以当作一个界面,下面就是应用Qtabwidget的一个简单例 ...

  5. 震惊!ConcurrentHashMap里面也有死循环,作者留下的“彩蛋”了解一下?

    JDK BUG 这篇文章,聊一下我最近才知道的一个关于 JDK 8 的 BUG 吧. 首先说一下我是怎么发现这个 BUG 的呢? 大家都知道我对 Dubbo 有一定的关注,前段时间 Dubbo 2.7 ...

  6. cb46a_c++_STL_算法_逆转和旋转reverse_rotate函数advance

    cb46a_c++_STL_算法_逆转和旋转reverse_rotateSTL算法--变序性算法reverse() 逆转reverse_copy()一边复制一般逆转rotate()旋转,某个位置开始前 ...

  7. python django 批量上传文件并绑定对应文件的描述

  8. 使用IntelliJ/Eclipse生成类图

    IntelliJ可以安装一个免费的pugins - Code Iris. PlantUML 在Eclipse中 - ObjectAidPapyrusEclipse Modeling Tools 查看原 ...

  9. Java WebService _CXF、Xfire、AXIS2、AXIS1_四种发布方式(优缺点对比)

    xis,axis2,Xfire以及cxf对比 http://ws.apache.org/axis/ http://axis.apache.org/axis2/java/core/ http://xfi ...

  10. Halcon斑点分析官方示例讲解

    官方示例中有许多很好的例子可以帮助大家理解和学习Halcon,下面举几个经典的斑点分析例子讲解一下 Crystals 图中显示了在高层大气中采集到的晶体样本的图像.任务是分析对象以确定特定形状的频率. ...