JDBC中Statement与CallableStatement的对比 | AI生成和翻译

Home 2025.09

在Java的JDBC(以及构建于其上的其他框架,如Hibernate或Spring)中,StatementCallableStatement 都是用于向数据库发送SQL命令的接口,但它们的用途有所不同。


1. Statement

示例

Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT id, name FROM employees");

while (rs.next()) {
    System.out.println(rs.getInt("id") + " " + rs.getString("name"));
}

2. CallableStatement

示例

Connection conn = DriverManager.getConnection(url, user, pass);
CallableStatement cstmt = conn.prepareCall("{call getEmployeeName(?, ?)}");

// 设置IN参数
cstmt.setInt(1, 101);

// 注册OUT参数
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);

// 执行
cstmt.execute();

// 获取OUT参数
String empName = cstmt.getString(2);
System.out.println("Employee name: " + empName);

主要区别(无表格形式)


👉 如果你需要,我也可以解释 PreparedStatement 如何在这两者之间起到作用(更安全、参数化的SQL,但不用于存储过程)。需要我补充这一点吗?


Back Donate