jdbc执行mysql函数_使用JDBC调用存储过程和函数

本文介绍了如何使用Java的JDBC接口CallableStatement来调用MySQL的存储过程和函数。通过示例代码展示了如何创建存储过程、调用存储过程、创建函数以及调用函数,并解释了存储过程和函数的区别。
摘要由CSDN通过智能技术生成

1 CallableStatement接口

CallableStatement接口用于调用存储过程和函数。

通过使用存储过程和函数,我们可以在数据库上编写业务逻辑,这将使性能更好,因为它们是预编译的。

2 存储过程和函数的区别?

e5012d6b833918b4459f895bed584136.png

3 获取CallableStatement对象

Connection接口的prepareCall() 方法返回CallableStatement对象。语法如下:

public CallableStatement prepareCall("{ call procedurename(?,?...?)}");

下面给出了获取CallableStatement对象代码示例:

CallableStatement stmt=con.prepareCall("{call myprocedure(?,?)}");

上面代码调用了接收2个参数(可能是输入参数或输出参数)的存储过程:myprocedure。

4 调用存储过程的示例

4.1 创建存储过程

在MySQL的test数据库中,执行以下SQL创建pro_insert_user存储过程:

DELIMITER $$

CREATE PROCEDURE pro_insert_user(username VARCHAR(50),PASSWORD VARCHAR(50))

BEGIN

INSERT INTO t_user(username,PASSWORD) VALUES(username,PASSWORD);

END $$

存储过程中涉及的t_user表的表结构如下:

CREATE TABLE `t_user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(50) DEFAULT NULL,

`password` varchar(50) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8

4.2 编写示例代码

CallProDemo:

package com.yiidian;

import java.io.*;

import java.sql.*;

/**

* 一点教程网 - http://www.yiidian.com

*/

public class CallProDemo {

public static void main(String args[])throws Exception {

try {

Class.forName("com.mysql.jdbc.Driver");

Connection con = DriverManager.getConnection(

"jdbc:mysql://localhost:3306/test", "root", "root");

CallableStatement stmt=con.prepareCall("{call pro_insert_user(?,?)}");

stmt.setString(1,"mark");

stmt.setString(2,"123");

stmt.execute();

System.out.println("存储过程调用成功!");

con.close();

}catch(Exception e){

System.out.println(e);

}

}

}

4.3 运行测试

执行完毕程序后,查看t_user表是否多了一条记录:

e214928ef0d216c06abd7f8da65716e4.png

5 调用函数的示例

在下面的示例中,我们调用pro_sum函数,该函数接收两个输入参数并返回给定数字的总和。在这里,我们使用到了CallableStatement接口的registerOutParameter() 方法,该方法将输出参数注册为其相应的类型。它向CallableStatement提供有关所显示结果类型的信息。

Types类定义了许多常量如INTEGER,VARCHAR,FLOAT,DOUBLE,BLOB,CLOB等。

5.1 创建存储过程

在MySQL的test数据库中,执行以下SQL创建fun_sum函数:

DELIMITER $$

CREATE FUNCTION fun_sum(n1 INT,n2 INT)

RETURNS INT

BEGIN

DECLARE total INT;

SET total = n1+n2;

RETURN total;

END $$

67881edd93cbe8d952a1b72b749f8427.png

5.2 编写示例代码

CallFunDemo:

package com.yiidian;

import java.io.*;

import java.sql.*;

/**

* 一点教程网 - http://www.yiidian.com

*/

public class CallFunDemo {

public static void main(String args[])throws Exception {

try {

Class.forName("com.mysql.jdbc.Driver");

Connection con = DriverManager.getConnection(

"jdbc:mysql://localhost:3306/test", "root", "root");

CallableStatement stmt=con.prepareCall("{?= call fun_sum(?,?)}");

stmt.setInt(2,10);

stmt.setInt(3,43);

stmt.registerOutParameter(1,Types.INTEGER);

stmt.execute();

System.out.println(stmt.getInt(1));

con.close();

}catch(Exception e){

System.out.println(e);

}

}

}

5.3 运行测试

a75289de85763aecb0dbe45981bfe05a.png

欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。

如果您对我的系列教程感兴趣,也可以关注我的网站:yiidian.com

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值