2016-11-10 91 views
1

目前我使用JdbcTemplate.update()方法來執行存儲過程,它基本上更新並插入一些記錄,它不返回任何東西。 但我不確定是否使用update()方法執行存儲過程的良好做法。使用該方法有什麼缺點嗎? 還是必須使用​​方法?我試圖避免實現execute(),因爲它會在我的應用程序中需要很多代碼更改。使用JdbcTemplate.update()執行存儲過程是否是一個好習慣?

代碼:

jdbcTemplate.update("call test_stored_proc(? , ?)", new Long[] { 
        userId, statusId }); 

回答

0

您可能會使用任何你想這一點。 execute是一種通用API,可以運行任何內容並讓您知道它返回的結果類型(結果集或受影響的行數)。 update是查詢的特殊版本,可以返回受影響的行或根本沒有任何結果。

JdbcTemplate最終將查詢委託給java.sql.Statement

java.sql.Statement Javadoc

的executeUpdate(字符串SQL): 執行給定的SQL語句,該語句可能爲INSERT,UPDATE或DELETE語句,或者不返回任何內容的SQL語句,如SQL DDL語句。

execute(String sql): 執行給定的SQL語句,該語句可能會返回多個結果。

+0

因此'update()'在內部調用Statement.executeUpdate()方法? – Rehman

+0

好的。得到它了 。它調用Statement.executeUpdate()。感謝你的回答 – Rehman

0

如果您使用的是基本的Spring jdbc支持,則應該使用SimpleJdbcCall來調用存儲過程,因爲這可以幫助您處理與這些類型的調用相關的元數據。請參閱http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html

但個人而言,我會在Spring Data JPA中使用@Procedure批註,這使得事情變得更容易。見http://docs.spring.io/spring-data/jpa/docs/1.10.4.RELEASE/reference/html/#jpa.stored-procedures

因此您的代碼更改爲調用方法上的接口是這樣的:

@Procedure("test_stored_proc") 
public void callIt(long userId, statusId); 

請注意,您必須設置彈簧JPARepository支持你的應用程序這個工作。

相關問題