在Java spring boot框架中,尝试使用以下方法使用Store过程
jdbcTemplate.setDataSource(dataSource);
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withSchemaName("abc")
.withFunctionName("proname")
.addDeclaredParameter(new
SqlOutParameter("",""));
Map<String, Object> map= new HashMap<>();
map.put("a",a);
map.put("b",b);
map.put("c",c);
map.put("d",d);
SqlParameterSource in = new MapSqlParameterSource(map);
Map<String, Object> out = simpleJdbcCall.execute(in);但我的过程也有out参数,这是我的过程
function proname(z varchar2,
a varchar2,
b varchar2,
c varchar2,
d in out number,
e out number,
f out varchar2,
g out varchar2)这个过程也有out参数,问题是如何在简单的JDBC调用中提到多个out参数(注意多个)?
发布于 2020-03-03 16:53:50
我试着像下面这样做,它起作用了:
jdbcTemplate.execute((CallableStatementCreator) con -> {
con = con.unwrap(OracleConnection.class);
CallableStatement cs = con.prepareCall("{ ? = call usr.abc.proname(?,?,?,?,?,?,?) }");
cs.registerOutParameter(1, OracleType.NUMBER);
cs.setString(2, "a");
cs.setString(3, "b");
cs.setString(4, "c");
cs.registerOutParameter(4, OracleType.NUMBER);
cs.registerOutParameter(5, OracleType.NUMBER);
cs.registerOutParameter(6, OracleType.VARCHAR);
cs.registerOutParameter(7, OracleType.VARCHAR);
return cs;
}, (CallableStatementCallback<MyModel>) cs -> {
cs.execute();
return new MyModel(cs.getInt(1),
cs.getInt(4),
cs.getInt(5),
cs.getString(6),
cs.getString(7));
});发布于 2018-06-06 15:40:37
您可以按照以下教程从存储过程中接受多个out参数。这将使您对如何实现这一点有一个简要的了解:
取上篇文章中的示例代码,下面是调用执行存储过程的方法:
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(dataSource).withProcedureName("getRecord");
SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
Map<String, Object> out = jdbcCall.execute(in);在相同的示例中,一旦您获得了所需的输出,您将以以下格式从响应中获取OUT参数:
Student student = new Student();
student.setId(id);
student.setName((String) out.get("out_name"));
student.setAge((Integer) out.get("out_age"));希望这能有所帮助!
发布于 2020-03-03 14:50:49
您可以使用SimpleJdbcCall的declareParameters方法,例如:
新建.declareParameters(新建SqlParameter("in_id",Types.NUMERIC),新建SqlOutParameter("out_first_name",Types.VARCHAR),新建SqlOutParameter("out_last_name",Types.VARCHAR),新建SqlOutParameter("out_birth_date",Types.DATE) );
https://stackoverflow.com/questions/50713653
复制相似问题