java调用存储过程返回参数

CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS
insert into Students([Name],[Age]) values (@name,@age)
select @id=@@IDENTITY –测试输出参数
return 30 –测试返回30
GO

??? try {
????? pstmt = con.prepareCall("{?=call sp_insertStudent(?,?,?)}");
????? pstmt.setString(2, "zengqingsong");
????? pstmt.setInt(3, 22);

????? pstmt.registerOutParameter(4, Types.INTEGER);
????? pstmt.registerOutParameter(1, Types.INTEGER);
????? int ret = pstmt.executeUpdate(); //执行影响的行数

????? int ret2 = pstmt.getInt(1); //返回参数(输出参数)
????? int id = pstmt.getInt(4); //输出参数
????? System.out.println(ret);
????? System.out.println(ret2);
????? System.out.println(id);
??? }

以下是Java代码示例,演示如何调用存储过程返回Map: ```java import java.sql.*; import java.util.*; public class StoredProcDemo { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydb"; String username = "root"; String password = "password"; String procName = "get_customer_info"; int customerId = 12345; try (Connection conn = DriverManager.getConnection(url, username, password)) { CallableStatement cstmt = conn.prepareCall("{call " + procName + "(?, ?, ?, ?)}"); cstmt.setInt(1, customerId); cstmt.registerOutParameter(2, Types.VARCHAR); cstmt.registerOutParameter(3, Types.VARCHAR); cstmt.registerOutParameter(4, Types.DATE); cstmt.execute(); Map<String, Object> resultMap = new HashMap<>(); resultMap.put("name", cstmt.getString(2)); resultMap.put("address", cstmt.getString(3)); resultMap.put("dob", cstmt.getDate(4)); System.out.println(resultMap); } catch (SQLException e) { e.printStackTrace(); } } } ``` 在此示例中,我们使用JDBC API调用存储过程`get_customer_info`,该存储过程接受一个int类型的参数`customerId`,并返回三个输出参数:一个varchar类型的`name`,一个varchar类型的`address`和一个date类型的`dob`。 我们使用`CallableStatement`对象来设置输入参数和注册输出参数,并使用`execute()`方法执行存储过程。然后,我们将输出参数的值存储在一个Map对象中,并打印出该Map对象。 请注意,此示例仅适用于MySQL数据库。在其他数据库中,存储过程调用语法可能会有所不同。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值