2017-03-12 45 views
0

我必须学习Java JDBC。Java JDBC:为什么需要注册out参数?

今天笔者就如何存储过程从内部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(?, ?)}"); 

我还没有看到过任何其他编程语言。您只需要注意参数中的内容。对于输出参数来说,功能护理本身。

为什么是不同的吗?

也许有人可以将我的几句话。以便我更好地了解这些存储过程调用的工作方式。

+0

jdbc驱动程序如何知道数据库中的存储过程具有out参数? –

+0

啊,好的。这是为了让Java运行时知道存储过程将返回Integer类型的值吗? –

+0

是的。这是最少需要实际JDBC驱动程序的解决方案。 –

回答

2

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

3

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

JDBC驱动程序的任务是该字符串发送到数据库,并收到成效。

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

如果您希望进行这种集成,您可以从JDBC中进行升级,并使用某种实用程序或框架将DB对象映射到Java对象。

相关问题