java - Postgres:从spring jdbc模板调用函数
问题描述
使用 spring StoredProcedure 中的自定义类型调用 postgres 函数的正确方法是什么?
假设我有一个定义的函数和自定义类型:
CREATE OR REPLACE FUNCTION addUser(user IN O_USER) RETURNS VOID
AS
$$
BEGIN
end;
$$ language plpgsql;
CREATE TYPE O_USER AS (
id NUMERIC,
name VARCHAR(50)
);
从 Spring 调用它时,我将用户对象转换为 String,如下所示:
public class AddUserProcedurePostgres extends StoredProcedure {
public AddUserProcedurePostgres(DataSource dataSource) {
super(dataSource, "addUser");
setFunction(true);
declareParameter(new SqlParameter("i_User", Types.OTHER, "O_USER"));
compile();
}
public void execute(SessionContext sessionContext, Dashboard dashboard) {
Map<String, Object> input = new HashMap<>();
input.put("i_User", "(1,Vishal)");
execute(input);
}
}
现在我的问题是:
创建一个对应对象的String然后传递它是正确的方法吗?或者有没有更好的方法?
假设我需要在现有的 O_USER 中添加其他自定义类型的数组,那么字符串需要如何格式化?
CREATE TYPE O_USER AS (
id NUMERIC,
name VARCHAR(50)
addresses O_ADDRESS[]
);
解决方案
推荐阅读
- c# - 在 C# Visual Studio 中没有为一个或多个必需参数提供值
- postgresql - pgAdmin 的“服务器”选项卡为空(Docker Compose)
- node.js - Nestjs UnhandledPromiseRejectionWarning: TypeError: this.flushLogs is not a function
- android - 如何使用数据绑定在 recyclerview 中获取选定的 textView 值(当前位置)?
- angular - Angular 10 - 以字符串形式提供的清理样式和脚本
- python - 从列表列表中绘制一个多线连续可滚动图,图中最多 10 个值
- windows - 尝试构建/无法启动程序时出现 C1083 错误
- javascript - 具有某些属性的接口函数(TypeScript)?
- java - 如何通过android应用程序登录whatsapp
- angular - 如果 typescript 的类型在运行时没有被解释,Angular 怎么知道注入哪个类?