gpt4 book ai didi

java - 如何将 String[] 参数设置为 native 查询?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:27 24 4
gpt4 key购买 nike

这是我的 PostgreSQL 函数:

salvarArquivoGeometricoCasoZeroPOINT
(dimensao text,tableName text,tuplas text[],srid text)

它有一个 text[] 参数,我想从我的 JPQL 向它传递一个 Java String[]:

public String salvarGeometriaCaso0(String[] tuplas,FileDto arquivo){
Query query =
em().createNativeQuery("select
salvarArquivoGeometricoCasoZeroPOINT(?1,?2,?3,?4)");
query.setParameter(1,arquivo.getGeo());//String
query.setParameter(2,arquivo.getTable());/String
query.setParameter(3,tuplas);//String[]
query.setParameter(4,arquivo.getSrid());//String
return (String) query.getSingleResult();//function returns a Text, so cast to String
}

上面的代码失败了,异常是:

ERROR] Internal Exception: org.postgresql.util.PSQLException: Can not infer a SQL
type to use for an instance of [Ljava.lang.String;.
Use setObject () with an explicit Types value to specify the type to use.

所以我不确定如何从 EclipseLink 调用我的函数。

最佳答案

我很晚才回答。

这个解决方案是一种使用 postgreSQL 内置函数的变通方法,对我来说绝对有效。

reference blog

1) 将字符串数组转换为逗号分隔的字符串

如果您使用的是 Java8,这很容易。其他选项是 here

String commaSeparatedString = String.join(",",stringArray); // Java8 feature

2) PostgreSQL 内置函数string_to_array()

您可以找到其他 postgreSQL 数组函数 here

// tableName ( name text, string_array_column_name text[] )

String query = "insert into tableName(name,string_array_column_name ) values(?, string_to_array(?,',') )";


int[] types = new int[] { Types.VARCHAR, Types.VARCHAR};

Object[] psParams = new Object[] {"Dhruvil Thaker",commaSeparatedString };

jdbcTemplate.batchUpdate(query, psParams ,types); // assuming you have jdbctemplate instance

关于java - 如何将 String[] 参数设置为 native 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12042181/

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