用于调用存储过程的Spring JDBC模板

Spring JDBC模板调用存储过程的正确方法是什么?

说,我有一个同时声明INOUT参数的存储过程,如下所示:

mypkg.doSomething(

id OUT int,

name IN String,

date IN Date

)

我遇到了一些CallableStatementCreator基于方法,我们必须显式地注册INOUT参数化。在JdbcTemplate课堂上考虑以下方法:

public Map<String, Object> call(CallableStatementCreator csc, List<SqlParameter> declaredParameters)

当然,我知道我可以这样使用它:

List<SqlParameter> declaredParameters = new ArrayList<SqlParameter>();

declaredParameters.add(new SqlOutParameter("id", Types.INTEGER));

declaredParameters.add(new SqlParameter("name", Types.VARCHAR));

declaredParameters.add(new SqlParameter("date", Types.DATE));

this.jdbcTemplate.call(new CallableStatementCreator() {

@Override

CallableStatement createCallableStatement(Connection con) throws SQLException {

CallableStatement stmnt = con.createCall("{mypkg.doSomething(?, ?, ?)}");

stmnt.registerOutParameter("id", Types.INTEGER);

stmnt.setString("name", "<name>");

stmnt.setDate("date", <date>);

return stmnt;

}

}, declaredParameters);

declaredParameters我已经在csc实现中注册它们的目的是什么?换句话说,为什么我需要传递一个csc春天可以简单地在con.prepareCall(sql)内部完成的事情?基本上,我不能传递其中一个而不是两个吗?

或者,是否有比我到目前为止遇到的调用存储过程(使用Spring JDBC模板)更好的方法?

注意:你可能会发现许多标题相似的问题,但与此题名不同。

回答:

在Spring中有很多方法可以调用存储过程。

如果CallableStatementCreator用于声明参数,则将使用Java的标准接口CallableStatement,即注销参数并分别设置它们。使用SqlParameter抽象将使你的代码更整洁。

我建议你看看SimpleJdbcCall。可以这样使用:

SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)

.withSchemaName(schema)

.withCatalogName(package)

.withProcedureName(procedure)();

...

jdbcCall.addDeclaredParameter(new SqlParameter(paramName, OracleTypes.NUMBER));

...

jdbcCall.execute(callParams);

对于简单的过程,你可以使用jdbcTemplate的update方法:

jdbcTemplate.update("call SOME_PROC (?, ?)", param1, param2);

以上是 用于调用存储过程的Spring JDBC模板 的全部内容, 来源链接: utcz.com/qa/416777.html

回到顶部