使用JDBC调用存储过程和函数
程序员文章站
2022-04-15 16:22:03
原文链接:http://www.yiidian.com/jdbc/jdbc callablestatement.html 1 CallableStatement接口 接口用于调用存储过程和函数。 通过使用存储过程和函数,我们可以在数据库上编写业务逻辑,这将使性能更好,因为它们是预编译的。 2 存储过 ......
原文链接:
1 callablestatement接口
callablestatement
接口用于调用存储过程和函数。
通过使用存储过程和函数,我们可以在数据库上编写业务逻辑,这将使性能更好,因为它们是预编译的。
2 存储过程和函数的区别?
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表是否多了一条记录:
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 $$
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 运行测试
欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。
如果您对我的系列教程感兴趣,也可以关注我的网站: