2016-06-12 95 views
0

我可以問我的同事們對這個問題的人,但我想,如果我需要知道這一點,然後等會其他新手所以最好把它放在堆棧溢出的意義和用法的registerOutParameter的。什麼是調用語句

我努力工作registerOutParameter功能做什麼。例如:

callableStatement.registerOutParameter(2, java.sql.Types.VARCHAR); 

我得到的那個registerOutParameter返回的是代替或除了ResultSet之外返回的值。我無法想象會發生什麼,或者可能的用例是什麼。

所以,你知道這是不是懶惰,到目前爲止,我還看了:

這似乎只是這個問題太基本被覆蓋。

Backgound信息來源,我在存儲過程在www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-out-parameter-example/做一個教程

+1

_「我怎麼也想不到會發生的或可能的使用情況會是怎樣。」 _你需要更好地解釋什麼是你不明白。你舉例來看看支持'OUT'風格參數(甚至'IN OUT')的數據庫實現,例如Microsoft SQL Server?海事組織,一旦你知道它的存在,用例就會變得清晰。對於一個非常做作的例子,看到https://technet.microsoft.com/en-us/library/aa174792(v=sql.80).aspx顯示3(!)不同的方式SQL Server的過程可以返回值 –

+0

感謝@正如所解釋的,MarkRotteveel,我正在教程http://tutorials.jenkov.com/jdbc/callablestatement.html。本教程包含'callableStatement.registerOutParameter(1,java.sql.Types.VARCHAR)''行。我正在努力解決,這只是爲查詢參數設置數據類型,還是在做其他事情? – Brett

+0

@MarkRotteveel,僅供參考我從來沒有聽說過'IN OUT'。我檢查了你發送的鏈接,但似乎沒有提及這一點 - 你能否在你的回答中解釋一下,以便我可以放棄它。 – Brett

回答

1

你的問題很緊如何保存過程在RDBMS中執行。請注意,通過CallableStatement執行存儲過程與執行返回ResultSetSELECT查詢有很大不同。當執行這樣的查詢時,RDBMS將返回列的描述,驅動程序使用這個描述來知道對數據的期望。

執行存儲過程之前,JDBC規範說,你必須調用registerOutParameter每個OUT參數。這是爲了向駕駛員指出應該預期的數據。爲什麼?因爲對於許多RDBMS,無法描述存儲過程。用戶可以通過這個API定義輸出參數。司機無法自行解決問題。然後可以執行存儲過程,然後調用CallableStatement上的獲取器來獲取已註冊的OUT參數的值。