2013-03-11 20 views
-1

我從java調用存儲過程。現在我需要通過名稱而不是位置inidex來設置存儲過程的參數,它是可行的嗎?如何在調用存儲過程時通過名稱而不是在JDBC/JPA中的位置來設置參數?

雖然我不想使用字符串連接,但處理起來並不安全和醜陋。

注意:我也需要使用OUT/INOUT參數。

+0

什麼JPA有這樣做嗎?使用JPA2.1存儲過程支持的預發佈?如果不是那麼JPA實施?或者如果使用JDBC然後刪除JPA標記 – DataNucleus 2013-03-11 10:55:31

+0

@DataNucleus,我可以選擇使用JPA或JDBC,並將選擇最適合的。 – imgen 2013-03-12 02:17:32

回答

2

我們可以命名使用格式

cstmt.setString("arg", name); 

其中cstmt所是CallableStatement

其中arg是在相應的存儲過程中的參數的名稱參數。

我們不需要以與存儲過程中的參數相同的順序命名參數,因爲在這種情況下我們將使用paramname。

而且你可以通過教程關於在下面鏈接的CallableStatement -

http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.jdbc_pg.doc/jdbc89.htm

您可以閱讀環節 - 的registerOutParameter語句是那裏的鏈接 -

// Register out parameter which should return the product is created. 
    cstmt.registerOutParameter("prod_id", Types.FLOAT); 
+0

但是,setString如何與OUT參數一起使用?還是它可以工作? – imgen 2013-03-11 09:58:37

+0

我編輯了我的答案。請查看它。 – 2013-03-11 10:11:20

+0

很酷。這應該做。 – imgen 2013-03-12 01:20:39

1

這是可行的,但不是在本地語言。您需要編寫自己的代碼來提供此功能或依賴第三方代碼(推薦的方法)。過去,我使用這個簡單的代碼article成功。它不處理所有情況,但它很容易擴展。如果您正在尋找更強大的解決方案,SpringFramework還提供了一些庫來提供此功能。

相關問題