gpt4 book ai didi

java - 如何使用自定义类型参数表单 java 调用 PostgreSQL 存储过程

转载 作者:行者123 更新时间:2023-11-29 12:11:59 25 4
gpt4 key购买 nike

我有一个 PostgreSQL 自定义类型:

CREATE TYPE seg_type AS
(
_timestamp bigint,
segment_type bigint,
area_type bigint,
);

我有一个 java 类:

public class Segment
{
private Long ts;
private Long seg_type;
private Long area_type;
}

另外我还有一个存储过程:

CREATE OR REPLACE FUNCTION SomeFunc(seg_type[])

我正在使用 postgresql-9.3-1102.jdbc41.jar 连接到我的数据库。我希望能够像这样使用 Segment[] 从 Java 代码中调用我的存储过程:

String query = new String("{call SomeFunc(?)}");
CallableStatement stmt = dbConn.prepareCall(query);
stmt.setObject(1, Segment[], Type);

如果这是正确的实现,那么我应该在类型中输入什么?还是实现不正确?

最佳答案

可能的解决方案如下:

java Segment 类中创建一个函数,以 postgreSQL 类型的格式创建一个字符串。

public class Segment
{
private Long ts;
private Long seg_type;
private Long area_type;

public pgType(){
return String.format("\"(%d,%d,%d)\"",
this.ts, this.seg_type, this.area_type)
}
}

注意:对于不同的数据类型,您可能需要对字符串进行不同的格式化。

这将返回以下字符串 "(ts, seg_type, area_type)" 表示 postgres 中的 seg_type 类型。

现在,您需要遍历 Segment[] 数组以形成一个 postgres 数组

StringBuilder segTypeArray = new StringBuilder("{");
segTypeArray.append(segments.[0].getDBValue());
for(int i = 1; i < segments.length; i++){
segTypeArray.append("," + list.get(i).getDBValue());
}
segTypeArray.append("}");

这将创建一个seg_type 类型的postgres 数组{"(ts, seg_type, area_type)","(ts, seg_type, area_type)",....}

创建查询字符串时,确保转换为 seg_type[]

String query = new String("{call SomeFunc(?::seg_type[])}");
CallableStatement stmt = dbConn.prepareCall(query);
stmt.setObject(1, segTypeArray.toString());

关于java - 如何使用自定义类型参数表单 java 调用 PostgreSQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29332096/

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