jdbc mysql 存储过程查询_JDBC执行存储过程的四种情况(Mysql)

这篇博客详细介绍了如何使用JDBC调用MySQL存储过程的四种常见情况:1) 返回结果集的存储过程;2) 带有输出参数的存储过程;3) 使用返回状态的存储过程;4) 获取受影响行数的存储过程。每个案例都包含存储过程的创建和Java代码示例。
摘要由CSDN通过智能技术生成

jdbc调用存储过程:

经常使用的4种:

1. 返回结果集的proc

2. 输出参数

3.使用带有返回状态的存储过程

4.受影响行数

以下为mysql的存储过程 sqlServer同理

案例1: 返回结果集的proc

存储过程:

drop procedure if exists proc_selectEmployee;

create procedure proc_selectEmployee(in carid varchar(20))

begin

select * from employee where cardID = carid;

end

call proc_selectEmployee('SZ65380');

[java] view plaincopy

import java.sql.*;import java.sql.CallableStatement;/**** 简单的jdbc调用存储过程 只有输入参数 返回单个结果集**/publicclass GeTest1 {  publicstatic void main(String[] args) {  Connection connection = null;//用于执行 SQL 存储过程的接口CallableStatement statement = null;ResultSet resultSet = null;try {Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/test";String user = "root";String password = "123";connection = DriverManager.getConnection(url, user, password);String sql = "call proc_selectEmployee(?)";//调用存储过程statement = connection.prepareCall(sql);statement.setString(1,"SZ65380");  resultSet = statement.executeQuery();if (resultSet.next()) {System.out.println(resultSet.getString("address"));}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {try {if (resultSet !=null) {  resultSet.close();}if (statement !=null) {  statement.close();}if (connection !=null) {  connection.close();}} catch (SQLException e) {e.printStackTrace();}}}}

案例2: 输出参数

存储过程:

drop procedure if exists proc_outtwo;

create procedure proc_outtwo(in idint int,out cardIdstring varchar(44),out

addressstring varchar(88))

begin

select cardID,address into cardIdstring,addressstring from employee where id =idint;

end

call proc_outtwo(1,@one,@two);

select @one;

select @two;

[java] view plaincopy

import java.sql.*;import java.sql.CallableStatement;/**** 执行存储过程 得到输出参数**/publicclass GeTest2 {  /*** @param args*/publicstatic void main(String[] args) {  Connection connection = null;//用于执行 SQL 存储过程的接口CallableStatement statement = null;ResultSet resultSet = null;try {Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/test";String user = "root";String password = "123";connection = DriverManager.getConnection(url, user, password);//第一个为输入参数后面2个为输出参数String sql = "call proc_outtwo(?,?,?);";//调用存储过程statement = connection.prepareCall(sql);//设置输入参数statement.setInt(1,1);  //设置输出参数 以及类型statement.registerOutParameter(2, Types.VARCHAR);statement.registerOutParameter(3, Types.VARCHAR);statement.execute();//得到输出参数System.out.println(statement.getString(2));System.out.println(statement.getString(3));} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {try {if (resultSet !=null) {  resultSet.close();}if (statement !=null) {  statement.close();}if (connection !=null) {  connection.close();}} catch (SQLException e) {e.printStackTrace();}}}}

案例3:

使用带有返回状态的存储过程  return 1;  mysql的proc不支持 返回值 sqlserver支持

如果要获得返回值的话为:

存储过程:

create proc checkit

(@addressString varchar(50))

as

begin

if ((select count(*) from employee where address =@addressString))

return 1

else

return 0

go

[java] view plaincopy

CallableStatement cstmt = con.prepareCall("{? = call checkit(?)}");  cstmt.registerOutParameter(1, java.sql.Types.INTEGER);cstmt.setString(2,"深圳");  cstmt.execute();System.out.println("return的值" + cstmt.getInt(1));

案例4:

获得更新行数:

drop procedure if exists proc_updateEmployee;

create procedure proc_updateEmployee()

begin

update Employee set job=1;

end

call proc_selectEmployee();

[java] view plaincopy

CallableStatement cstmt = con.prepareCall("{call proc_updateEmployee()}");  cstmt.execute();int count = cstmt.getUpdateCount();cstmt.close();System.out.println("受影响行数:" + count);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值