在JDBC中,我们若是想调用数据库的 存储过程和函数,
就要用到CallableStatement类的对象:
CallableStatement:
调用 存储过程:
调用存储过程的sql语句语法:
{call<procedure -name >[( < arg1 >,<arg2 >, ...)]}
使用步骤:
- 获取连接对象
- 组件sql语句 格式:
{call<procedure -name >[( < arg1 >,<arg2 >, ...)]}- prepareCall(sql)方法获得CallableStatement对象
输入参数:
使用CallableStatement对象的
setType(parameterIndex, value)方法给CallableStatement对象设置参数
输出参数:
使用CallableStatement对象的
registerOutParameter(parameterIndex, Types)方法来注册输出参数
- 使用CallableStatement对象的execute()方法来执行存储过程
- 使用CallableStatement对象的
getType(parameterIndex)方法来获取输出参数的终值- 释放资源
那么,本人现在来给出一个空表:
那么,本人现在来展示下使用JDBC来调用存储过程的步骤:
首先是 存储过程:
DELIMITER $$
USE `dbstudy`$$
DROP PROCEDURE IF EXISTS `myPro`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `myPro`(IN userid VARCHAR(18),IN username VARCHAR(8),OUT num INT)
BEGIN
INSERT INTO `dbstudy`.`users` (`user_id`, `user_name`) VALUES (userid, username);
SELECT COUNT(*) FROM users INTO num;
END$$
DELIMITER ;
接下来是相应的Java代码:
package edu.youzg.about_jdbc.core;
import edu.youzg.about_jdbc.utils.JDBCUtils;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;
public class Demo4 {
public static void main(String[] args) throws SQLException {
//使用JDBC 来调用数据库的存储过程和函数
Connection conn = JDBCUtils.getConnection();
//调用存储过程,sql语句格式:
//{call<procedure -name >[( < arg1 >,<arg2 >, ...)]}
String sql="{call myPro(?,?,?)}";
CallableStatement callableStatement = conn.prepareCall(sql);
//第一个问号是输入参数 第二个问号是输入参数。
callableStatement.setString(1,"jsph1096");
callableStatement.setString(2,"JOSTA");
//注册输出参数 第一个参数是参数位置。第三个参数是输出参数的类型。对于输出参数,我们得注册这个输出参数
callableStatement.registerOutParameter(3, Types.INTEGER);
//执行
callableStatement.execute();
//获取输出参数的值
int result = callableStatement.getInt(3);
System.out.println("注册成功!您是第[" + result + "]位客户");
//释放资源
callableStatement.close();
conn.close();
}
}
那么,本人先来展示下运行后,控制台的内容:
现在,本人再来展示下运行后,目标表的内容:
调用 函数:
使用步骤:
获取连接对象
组件sql语句 格式:
prepareCall(sql)方法获得CallableStatement对象
参数:
使用CallableStatement对象的
setType(parameterIndex, value)方法给CallableStatement对象设置参数
返回值:
使用CallableStatement对象的
registerOutParameter(parameterIndex, Types)方法来注册返回值
- 使用CallableStatement对象的execute()方法来执行存储过程
- 使用CallableStatement对象的
getType(parameterIndex)方法来获取返回值- 释放资源
本人先来展示下要调用的函数:
现在,本人来给出相应的Java代码:
package edu.youzg.about_jdbc.core;
import edu.youzg.about_jdbc.utils.JDBCUtils;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;
public class Demo4 {
public static void main(String[] args) throws SQLException {
//使用JDBC 来调用数据库的存储过程和函数
Connection conn = JDBCUtils.getConnection();
// 调函数的sql 格式:
//{?=call<procedure -name >[( < arg1 >,<arg2 >, ...)]}
String sql="{?=call md5(?)}";
CallableStatement callableStatement = conn.prepareCall(sql);
//注册返回值
callableStatement.registerOutParameter(1, Types.INTEGER);
//设置参数
callableStatement.setString(2,"123456");
//执行
callableStatement.execute();
//获取返回的结果
String anInt = callableStatement.getString(1);
System.out.println(anInt);
//释放资源
callableStatement.close();
conn.close();
}
}
那么,本人来展示下运行结果:
那么,本篇博文的知识点在这里就讲解完毕了。
(请观看本人博文 —— 《JDBC 专栏总集篇》)