Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在返回通过JDBC调用的单个结果的存储过程中,使用out参数与按列获取结果之间有什么区别?_Java_Mysql_Jdbc - Fatal编程技术网

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

Java 在返回通过JDBC调用的单个结果的存储过程中,使用out参数与按列获取结果之间有什么区别?,java,mysql,jdbc,Java,Mysql,Jdbc,我知道对于不止一个结果,您没有太多的选择来使用out参数,但我想知道以下两种情况之间的区别是什么,其中有一个out参数 假设我有两个存储过程: CREATE PROCEDURE no_out_params(IN foo INT) BEGIN SELECT foo + 1 as result; END 及 然后,使用JDBC,我可以: CallableStatement c1 = conn.prepareCall("{ call no_out_params(?)}"); c1.setInt(

我知道对于不止一个结果,您没有太多的选择来使用out参数,但我想知道以下两种情况之间的区别是什么,其中有一个out参数

假设我有两个存储过程:

CREATE PROCEDURE no_out_params(IN foo INT)
BEGIN
  SELECT foo + 1 as result;
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)
}

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

假设您在try/finally中正确地关闭了所有内容(为简洁起见省略),那么非out参数方法是否提供了任何优势

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


如果您只返回一个值,您可能想看看函数是否可以工作。

不幸的是,我的特殊情况要求事务具有回滚功能,因此我认为这排除了使用函数的可能性。我确实注意到,在一个有点相关但不同的问题中,如果从存储过程中调用存储过程,则需要一个out参数(我认为,我相信也可以使用临时表)。
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);