java 如何调用存储过程
调用存储过程的方法
在Java中调用数据库存储过程通常使用JDBC(Java Database Connectivity)API。以下是详细步骤:
准备JDBC连接 确保已经加载数据库驱动并建立连接。以MySQL为例:
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/dbname", "username", "password");
使用CallableStatement 存储过程调用需要创建CallableStatement对象:
String sql = "{call procedure_name(?, ?)}"; // 参数占位符
CallableStatement cs = conn.prepareCall(sql);
设置输入参数 通过set方法绑定输入参数(索引从1开始):

cs.setString(1, "input_value"); // 第一个参数
cs.setInt(2, 100); // 第二个参数
注册输出参数 如需获取输出参数,需先注册参数类型:
cs.registerOutParameter(2, Types.INTEGER); // 注册第二个参数为OUT类型
执行存储过程 使用execute()方法执行调用:

cs.execute();
获取输出结果 通过注册的参数索引获取返回值:
int outputValue = cs.getInt(2);
处理结果集 若存储过程返回结果集:
ResultSet rs = cs.getResultSet();
while (rs.next()) {
// 处理结果
}
关闭资源 最后释放所有资源:
rs.close();
cs.close();
conn.close();
完整示例代码
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
CallableStatement cs = conn.prepareCall("{call get_employee(?, ?)}");
cs.setInt(1, 101); // 设置输入参数
cs.registerOutParameter(2, Types.VARCHAR); // 注册输出参数
cs.execute();
String name = cs.getString(2); // 获取输出参数
System.out.println("Employee Name: " + name);
} catch (SQLException e) {
e.printStackTrace();
}
注意事项
- 不同数据库的存储过程语法可能有差异,Oracle使用
{call proc(?,?)},SQL Server可能使用exec proc_name - 对于返回多个结果集的情况,需使用
getMoreResults()方法 - 建议使用try-with-resources确保资源自动关闭
- 参数类型需与数据库存储过程定义严格匹配






