Java JDBC: 为什么要注册out-parameter?
Java JDBC: Why is it necessary to register out-parameter?
我现在要学习JavaJDBC。
今天我了解了如何从 JDBC.
中调用存储过程
当我有一个像这样的存储过程时,我不明白的是:
CREATE PROCEDURE demo.get_count_for_department
(IN the_department VARCHAR(64), OUT the_count INT)
BEGIN
...
"the_count" 被标记为输出参数。还指定了类型。所以这个大家应该都知道了。
不过我必须再次指定类型
statement.registerOutParameter(2, Types.INTEGER);
我必须重新输入类型吗?这对我来说似乎是多余的。
为什么我必须在其中给出两个参数?
statement = connection.prepareCall("{call get_count_for_department(?, ?)}");
我还没有在任何其他编程语言中看到过这一点。您只需要注意输入参数。因为输出参数需要函数本身。
这里为什么不一样?
也许有人可以给我留言。这样我就可以更好地了解这些存储过程调用的工作原理。
根据数据库的不同,技术上可能没有必要。这样做允许 JDBC 驱动程序执行存储过程而无需首先查询数据库以获取有关该语句的元数据,并且它还可以用于消除具有相同名称(但不同参数)的多个存储过程之间的歧义。
原因是 sql 语句从 java 的角度来看只是一个字符串。
JDBC 驱动程序的任务是将该字符串发送到数据库并接收结果。
您可以读取存储过程元数据以获取有关您将要调用的存储过程的信息,但这需要时间并且可能需要对数据库进行多次查询。
如果您想要这种集成,您可以在 JDBC 的基础上更进一步,并使用某种实用程序或框架将 DB 对象映射到 java 对象。
我现在要学习JavaJDBC。
今天我了解了如何从 JDBC.
中调用存储过程当我有一个像这样的存储过程时,我不明白的是:
CREATE PROCEDURE demo.get_count_for_department
(IN the_department VARCHAR(64), OUT the_count INT)
BEGIN
...
"the_count" 被标记为输出参数。还指定了类型。所以这个大家应该都知道了。
不过我必须再次指定类型
statement.registerOutParameter(2, Types.INTEGER);
我必须重新输入类型吗?这对我来说似乎是多余的。
为什么我必须在其中给出两个参数?
statement = connection.prepareCall("{call get_count_for_department(?, ?)}");
我还没有在任何其他编程语言中看到过这一点。您只需要注意输入参数。因为输出参数需要函数本身。
这里为什么不一样?
也许有人可以给我留言。这样我就可以更好地了解这些存储过程调用的工作原理。
根据数据库的不同,技术上可能没有必要。这样做允许 JDBC 驱动程序执行存储过程而无需首先查询数据库以获取有关该语句的元数据,并且它还可以用于消除具有相同名称(但不同参数)的多个存储过程之间的歧义。
原因是 sql 语句从 java 的角度来看只是一个字符串。
JDBC 驱动程序的任务是将该字符串发送到数据库并接收结果。
您可以读取存储过程元数据以获取有关您将要调用的存储过程的信息,但这需要时间并且可能需要对数据库进行多次查询。
如果您想要这种集成,您可以在 JDBC 的基础上更进一步,并使用某种实用程序或框架将 DB 对象映射到 java 对象。