2016-11-10 96 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支持你的应用程序这个工作。

相关问题