Java JDBC:为什么需要注册out-parameter?

时间:2017-03-12 09:42:14

标签: java mysql jdbc

我目前必须学习Java JDBC。

今天我看一下如何从JDBC中调用存储过程。

我没有得到......,当我有一个存储过程时,例如这个:

CREATE PROCEDURE demo.get_count_for_department
(IN the_department VARCHAR(64), OUT the_count INT)
BEGIN
 ...

" the_count"被标记为out参数。还指定了类型。所以这一切都应该是已知的。

然而,我必须再次指定类型

statement.registerOutParameter(2, Types.INTEGER);

我必须再把那种类型放进去吗?这对我来说似乎是多余的。

为什么我必须在那里提供两个参数?

statement = connection.prepareCall("{call get_count_for_department(?, ?)}");

我还没有在任何其他编程语言中看到这一点。您只需要注意参数。对于out参数,需要关注函数。

为什么会有不同之处?

也许有人可以给我几句话。这样我就可以更好地了解这些存储过程调用的工作原理。

2 个答案:

答案 0 :(得分:3)

原因是sql语句只是一个从java透视图中看到的字符串。

JDBC驱动程序的任务是将该字符串发送到数据库并接收结果。

您可以读取存储过程元数据以获取有关您要调用的存储过程的信息,但这需要花费时间并且可能需要多次查询数据库。

如果你想要这种集成,你可以从JDBC上升一步,使用某种实用程序或框架将DB对象映射到java。

答案 1 :(得分:2)

根据数据库的不同,技术上可能没有必要。这样做允许JDBC驱动程序执行存储过程,而无需首先查询数据库以获取有关该语句的元数据,并且它还可用于消除具有相同名称(但不同参数)的多个存储过程之间的歧义。

相关问题