JavaJDBC:为什么需要注册出参数?

JavaJDBC:为什么需要注册出参数?,java,mysql,jdbc,Java,Mysql,Jdbc,我现在必须学习Java JDBC 今天,我了解了如何从JDBC中调用存储过程 当我有这样一个存储过程时,我没有得到…,例如: CREATE PROCEDURE demo.get_count_for_department (IN the_department VARCHAR(64), OUT the_count INT) BEGIN ... “_计数”被标记为out参数。类型也被指定。所以这一切都应该是众所周知的 然而,我必须再次指定类型 statement.registerOutParame

我现在必须学习Java JDBC

今天,我了解了如何从JDBC中调用存储过程

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

CREATE PROCEDURE demo.get_count_for_department
(IN the_department VARCHAR(64), OUT the_count INT)
BEGIN
 ...
“_计数”被标记为out参数。类型也被指定。所以这一切都应该是众所周知的

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

statement.registerOutParameter(2, Types.INTEGER);
我得把打字机再放进去?这对我来说似乎是多余的

为什么我必须给出两个参数呢

statement = connection.prepareCall("{call get_count_for_department(?, ?)}");
我在任何其他编程语言中都没有见过这种情况。您只需注意in参数。因为out参数需要函数本身

为什么这里不同?


也许有人能给我写几行。因此,我对这些存储过程调用如何工作有了更好的了解

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

根据数据库的不同,技术上可能不需要这样做。这样做允许JDBC驱动程序执行存储过程,而不必首先查询数据库中有关语句的元数据,还可以使用它来消除具有相同名称(但参数不同)的多个存储过程之间的歧义原因是从java的角度来看,sql语句只是一个字符串

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

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


如果您想要这种集成,您可以从JDBC开始,使用某种实用程序或框架将DB对象映射到java对象。

原因是从java的角度看,sql语句只是一个字符串

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

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


如果您想要这种集成,您可以从JDBC开始,使用某种实用程序或框架将DB对象映射到java对象。

JDBC驱动程序如何知道数据库中的存储过程有一个out参数?啊,好的。让Java运行时知道存储过程将返回Integer类型的值?是的。这是一个需要最少实际JDBC驱动程序的解决方案。JDBC驱动程序如何知道数据库中的存储过程有一个out参数?啊,好的。让Java运行时知道存储过程将返回Integer类型的值?是的。这是需要最少实际JDBC驱动程序的解决方案。