java 如何调用存储过程
调用存储过程的基本方法
在Java中调用数据库存储过程通常使用JDBC(Java Database Connectivity)API。以下是具体实现方式:
使用CallableStatement接口
CallableStatement是PreparedStatement的子接口,专门用于调用存储过程。通过Connection对象的prepareCall方法创建:
CallableStatement callableStatement = connection.prepareCall("{call 存储过程名(?, ?)}");
设置输入参数
通过setXXX方法设置输入参数,与PreparedStatement类似:
callableStatement.setString(1, "参数值");
callableStatement.setInt(2, 100);
注册输出参数
使用registerOutParameter方法注册输出参数,需指定参数位置和SQL类型:
callableStatement.registerOutParameter(2, Types.VARCHAR);
执行存储过程
调用execute或executeUpdate方法执行:
callableStatement.execute();
获取输出参数值
通过getXXX方法获取输出参数值:
String outputValue = callableStatement.getString(2);
处理结果集
如果存储过程返回结果集,通过getResultSet获取:
ResultSet resultSet = callableStatement.getResultSet();
while (resultSet.next()) {
// 处理结果
}
完整示例代码
try (Connection conn = DriverManager.getConnection(url, username, password);
CallableStatement stmt = conn.prepareCall("{call get_employee_details(?, ?)}")) {
// 设置输入参数
stmt.setInt(1, employeeId);
// 注册输出参数
stmt.registerOutParameter(2, Types.VARCHAR);
// 执行存储过程
stmt.execute();
// 获取输出参数
String employeeName = stmt.getString(2);
System.out.println("Employee Name: " + employeeName);
// 处理结果集
try (ResultSet rs = stmt.getResultSet()) {
while (rs.next()) {
// 处理每行数据
}
}
} catch (SQLException e) {
e.printStackTrace();
}
注意事项
- 确保数据库驱动已正确加载
- 使用try-with-resources确保资源释放
- 参数索引从1开始
- 根据存储过程定义正确设置参数类型
- 处理可能抛出的SQLException
存储过程语法变体
不同数据库可能有不同的存储过程调用语法:
Oracle语法:
CallableStatement stmt = conn.prepareCall("{? = call function_name(?)}");
SQL Server语法:
CallableStatement stmt = conn.prepareCall("{call proc_name(?, ?)}");
MySQL语法:
CallableStatement stmt = conn.prepareCall("{call proc_name(?, ?)}");
根据使用的数据库类型选择适当的语法格式。







