Java Spring 将Arraylist插入postgresql数据库JdbcTemplate

问题描述 投票:0回答:2

我需要使用 Spring 和 PostgreSQL 作为数据库来创建一个 REST 应用程序。我需要向数据库中输入一些包含 String ArrayList 的对象:ArrayList < String >。我的问题是我找不到将数组列表设置为preparedStatement 的方法。我尝试使用 setObject 但它显然不起作用。如下:

public int insert(Location location) {
        return jdbcTemplate.update(conn -> {
            PreparedStatement ps = conn.prepareStatement(INSERT_STMT);
            ps.setInt(1, location.getParam1());
            ps.setString(2, location.getParam2());
            ps.setString(3, location.getParam3());
            ps.setString(4, location.getParam4());
            ps.setString(5, location.getParam5());
            ps.setString(6, location.getParam6());
            ps.setString(7, location.getParam7());
            ps.setObject(8, location.getArrayListDate());
            return ps;
        });
    }
private static final String INSERT_STMT =
        " insert into locations (param1, param2, param3, param4, param5, param6, param7, dates)"
                + " values (?, ?, ?, ?, ?, ?, ?, ?)"
        ;

表格形式:

create table locations (
    param1 int primary key
  , param2 text
  , param3 text
  , param4 text
  , param5 text
  , param6 text
  , param7 text
  , dates TEXT[]
)

我怎样才能做到这一点?谢谢你:)

java spring postgresql arraylist prepared-statement
2个回答
0
投票

您需要使用

java.util.ArrayList
java.sql.Array
转换为
conn.createArrayOf()
并将其传递为

pstmt.setArray("text", array)

参考这个


0
投票

当您使用preparedStatement并将列表传递给查询(如“IN”子句)时,您必须在PostgreSql中执行此操作,然后您就有了-

  1. 使用“ANY”而不是“IN”
  2. 正如@z21所说,将 arrayList 转换为 sql.array

sql语法为:= ANY (?) .. 在准备好的语句中为“?”设置值

© www.soinside.com 2019 - 2024. All rights reserved.