2017-03-12 86 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對象。

相關問題