Was ist der richtige Weg, um gespeicherte Prozeduren mit der modernen (ca. 2012) Spring JDBC-Vorlage aufzurufen?
Angenommen, ich habe eine gespeicherte Prozedur, die sowohl IN
als auch OUT
Parameter deklariert.
mypkg.doSomething(
id OUT int,
name IN String,
date IN Date
)
Ich bin auf CallableStatementCreator
basierende Ansätze gestoßen, bei denen wir uns explizit registrieren IN
und OUT
Parameter festlegen müssen. Betrachten Sie die folgende Methode in der JdbcTemplate
Klasse:
public Map<String, Object> call(CallableStatementCreator csc, List<SqlParameter> declaredParameters)
Natürlich weiß ich, dass ich es so verwenden kann:
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);
Was ist der Zweck, declaredParameters
wenn ich sie bereits in meiner csc
Implementierung registriere ? Mit anderen Worten, warum sollte ich eine Zeit abgeben müssen, in der der csc
Frühling einfach con.prepareCall(sql)
intern funktionieren kann ? Kann ich nicht einen von beiden anstelle von beiden übergeben?
Oder gibt es eine viel bessere Möglichkeit, gespeicherte Prozeduren (mithilfe der Spring JDBC-Vorlage) aufzurufen als die, auf die ich bisher gestoßen bin?
Hinweis: Möglicherweise finden Sie viele Fragen, die einen ähnlichen Titel zu haben scheinen, aber nicht mit diesem identisch sind.