java - 在返回通过 JDBC 调用的单个结果的存储过程中,使用 out 参数与按列获取结果有什么区别?

标签 java mysql jdbc

我知道不止一个结果,你没有太多选择使用 out 参数,但我想知道以下两种情况有什么区别,其中有一个 out 参数。

假设我有两个存储过程:

CREATE PROCEDURE no_out_params(IN foo INT)
BEGIN
  SELECT foo + 1 as result;
END

CREATE PROCDURE with_out_params(IN foo INT, OUT result INT)
BEGIN
  SET result = foo + 1;
END

然后使用 JDBC 我可以:

CallableStatement c1 = conn.prepareCall("{ call no_out_params(?)}");
c1.setInt(1, 5);
ResultSet rs = c1.executeQuery();
if (rs.next()) {
  return rs.getInt("result"); // or rs.getInt(1)
}

CallableStatement c1 = conn.prepareCall("{ call with_out_params(?, ?)}");
c1.setInt(1, 5);
c1.registerOutParameter(2, Types.INT);
c1.executeQuery();
return c1.getInt(2);

假设您正确关闭了 try/finally 中的所有内容(为简洁起见省略),非输出参数方法是否提供任何优势?如果不是,假设应该始终使用 out 参数是否合理(如果只是为了在有多个结果的情况下保持一致)?

最佳答案

Assuming you're properly closing everything in try/finally's (omitted for brevity), does the non-out parameter method provide any advantage?

优点是能够检索结果集(使用任何语言,Java/等)而无需定义所有 OUT 参数(没有值(value)的额外工作)。

如果您只返回一个值,您可能想看看 FUNCTION 是否可行。

关于java - 在返回通过 JDBC 调用的单个结果的存储过程中,使用 out 参数与按列获取结果有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930085/

相关文章:

java - 在json文件中将图像转换为Base64问题

mysql - MySQL 中何时使用单引号、双引号和反引号

java - JDBC 连接中的 URL 为空

java - 如何发送 Maven 构建的电子邮件通知

tomcat - debian squeeze 上的 sun java6 内存不足异常,而不是 openjdk

mysql - 如何选择过去 4 整周(周日到周六)的数据?

mysql 和 group_concat_length

java - JDBC 从其中 x=(?) 选择 *

tomcat - 在 context.xml 和 persistence.xml 中使用 jdbc.properties

java - SSL CA证书安装