gpt4 book ai didi

java - Spring - 调用具有复杂结果的存储函数

转载 作者:行者123 更新时间:2023-12-02 06:25:51 26 4
gpt4 key购买 nike

我在 PostgreSQL 中有以下类型:

CREATE TYPE TR_PERSON AS (
i_out integer,
str_out text
);

我还存储了返回我的类型的函数:

CREATE OR REPLACE FUNCTION test_function(id int)
RETURNS TR_PERSON
AS $$
SELECT $1, text('Alice')
$$ LANGUAGE SQL;

我正在尝试使用 spring 中的 SimpleJdbcCall 从数据库获取数据:

SimpleJdbcCall call = new SimpleJdbcCall(jdbcTemplate)
.withFunctionName("test_function");

SqlParameterSource in = new MapSqlParameterSource().addValue("id", 1);

try {
TRPerson result = call.executeFunction(TRPerson.class, in);
} catch (DataAccessException e) {
logger.log(Level.SEVERE, "call failed", e);
}

然后我遇到了异常:

SEVERE: call failed
org.springframework.dao.InvalidDataAccessApiUsageException: Required input parameter 'i_out' is missing
at org.springframework.jdbc.core.CallableStatementCreatorFactory$CallableStatementCreatorImpl.createCallableStatement(CallableStatementCreatorFactory.java:209)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1014)
at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1070)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:387)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:350)
at org.springframework.jdbc.core.simple.SimpleJdbcCall.executeFunction(SimpleJdbcCall.java:154)

我不明白为什么 i_out 被标记为输入类型。我做错了什么?

SimpleJdbcCall 适合我的需求吗?

存储函数和复杂类型结果的最佳实践是什么?

我非常感谢一些框架代码来捕获管道。

最佳答案

我找到了解决方案,也许它并不理想,但工作良好,并且在从函数返回多个记录的情况下也应该工作(管道返回)。这里是。希望对您也有帮助。

String SQL = "select i_out, str_out from test_function1(:id)";
SqlParameterSource namedParameters = new MapSqlParameterSource("id", request.getIntTestVar());

List<TRPerson> result = namedTemplate.query(SQL, namedParameters, new RowMapper() {

@Override
public TRPerson mapRow(ResultSet rs, int i) throws SQLException {
TRPerson result = new TRPerson();
result.setIntVar(rs.getInt("i_out"));
result.setStrVar(rs.getString("str_out"));
return result;
}
});

关于java - Spring - 调用具有复杂结果的存储函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20537857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com