jdbc mysql 函数_MYSQL 之 JDBC(十七): 调用函数&存储过程

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

{?= call [(, , ...)]}

call [(, , ...)]}

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;'

实验

我自己写了一个函数

3261cce84d531bb17b20112813d07e17.gif

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;

3261cce84d531bb17b20112813d07e17.gif

这个函数在idea中显示的是

3261cce84d531bb17b20112813d07e17.gif

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;

3261cce84d531bb17b20112813d07e17.gif

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

3261cce84d531bb17b20112813d07e17.gif

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);

}

}

}

3261cce84d531bb17b20112813d07e17.gif

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值