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. Modern C++

    microsoft: Modern C++ 目录 1. auto 关键字 2. 智能指针(smart pointers) 3. std::string & std::string_view 4 ...

  2. Ubuntu18.04 安装QQ、Tim、微信与win无差异

    一.安装deepin-wine环境: 桌面下打开终端,依次输入以下命令 git clone https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu.git ...

  3. MySQL ORDER BY:对查询结果进行排序

    在 MySQL SELECT 语句中,ORDER BY 子句主要用来将结果集中的数据按照一定的顺序进行排序. 其语法格式为: ORDER BY {<列名> | <表达式> | ...

  4. flex弹性布局及其属性

    CSS3 弹性盒子内容 弹性盒子由弹性容器(Flex container)和弹性子元素(Flex item)组成. 弹性容器通过设置 display 属性的值为 flex 或 inline-flex将 ...

  5. MFC_VC++_时间获取与保存列表控件内容到文件操作方法

    MFC_VC++_时间获取与保存列表控件内容到excel文件操作方法 void CDataView::OnBnClickedBtnExporttoexcel() { CTime time = CTim ...

  6. 动态调试 别人写的jar包

    在别人的jar应用程序里: 在VMoption选项中添加: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50064 或者 ...

  7. 添加现有项目到git仓库

    情景: 做了一个项目,需要放到git仓库里 为什么做这个记录? 我们一般的操作是先有仓库, 然后 git clone  到一个空文件夹.     然后再这个空文件夹里加项目文件.  再git push ...

  8. cb10a_c++_顺序容器的操作3关系运算符

    cb10a_c++_cb09a_c++_顺序容器的操作3 2 顺序容器的操作3 3 关系运算符 4 所有的容器类型都可以使用 5 比较的容器必须具有相同的容器类型,double不能与int作比较 6 ...

  9. Golang简易入门教程——面向对象篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第9篇文章,我们一起来看看golang当中的面向对象的部分. 在现在高级语言当中,面向对象几乎是不可或缺也是一门语言 ...

  10. GitHub 热点速览 Vol.25:距离优雅编程你差个它

    作者:HelloGitHub-小鱼干 摘要:如何优雅地夸一个程序员呢?vscode-rainbow-fart 作为一个彩虹屁的项目,深得程序员心,能在你编程时疯狂称赞你的除了你自己,还有它.除了鼓励之 ...