如果您只想設置某些參數,那麼使用JDBC調用存儲過程的最佳方式是什麼?如何在JDBC中調用存儲過程僅設置某些參數
如果我只是使用SQL,我可以在SQL中通過名稱設置參數以調用存儲過程。例如。如果我有九個參數的存儲過程,我想設置參數1,2和9,留下其餘爲默認值,我可以運行該SQL:
exec my_stored_procedure
@parameter_1 = "ONE",
@parameter_2 = "TWO",
@parameter_9 = "NINE"
使用JDBC(具體的jConnect 6.0)看起來在使用CallableStatement時,您必須通過整數索引來設置參數,而不是它們的名稱。如果我嘗試創建上面的存儲過程一個CallableStatement,有9個參數,只設置參數1,2和9,像這樣:
myStoredProcedureCall =
sybConn.prepareCall("{call my_stored_procedure (?, ?, ?, ?, ?, ? , ?, ?, ?)}");
myStoredProcedureCall.setString(1, "ONE");
myStoredProcedureCall.setString(2, "TWO");
myStoredProcedureCall.setString(9, "NINE");
ResultSet paramResults = myStoredProcedureCall.executeQuery();
然後我得到此SQLException拋出:
*** SQLException caught ***
SQLState: JZ0SA
Message: JZ0SA: Prepared Statement: Input parameter not set, index: 2.
Vendor: 0
對於我想要做的一些背景知識,我需要創建一個進程,從IBM MQ流接收關於產品的信息,然後在第三個應用程序中創建一個產品。第三方應用程序使用Sybase來存儲其數據,並創建一個產品,我需要調用具有大約130個參數的存儲過程。對於需要創建的產品類型,只需要設置其中約15個參數,剩下的參數將保留爲默認值。
選項我考慮是:
- 創建自定義存儲過程,只有將我需要的值,然後調用第三方產品的存儲過程。
- 在Java中設置所有參數的默認值。
當然,必須有一個更簡單的方法來做到這一點?
只是爲別人需要的。上面的例子中,String sql中的'\ n'可以替換爲一個空格,Sybase不需要單獨列出參數,它們只需用逗號分隔。 – alaniane 2017-12-06 23:05:48
@alaniane正確。我從一些代碼中複製了一些代碼,我也記錄了這些語句。換行符只是爲了幫助人類解決SQL和SQL問題。 – 2017-12-08 14:36:40