当前位置: 移动技术网 > IT编程>开发语言>Java > 使用JDBC调用存储过程和函数

使用JDBC调用存储过程和函数

2020年03月18日  | 移动技术网IT编程  | 我要评论

原文链接:

1 callablestatement接口

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

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

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

file

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表是否多了一条记录:

file

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 $$

file

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 运行测试

file

file

欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。
如果您对我的系列教程感兴趣,也可以关注我的网站:

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网