【问题标题】:How to insert Integer array into postgresql table using jdbcTemplate in Java Springboot?java - 如何在Java Springboot中使用jdbcTemplate将整数数组插入postgresql表?
【发布时间】:2017-05-09 06:51:42
【问题描述】:

我在将整数数组插入 Postgresql 表时遇到问题,我该如何处理?

String sql = "INSERT INTO draw_result (id, ball_numbers,  balls_with_mega_ball, draw_dates, mega_plier) VALUES(?, ?, ?, ?, ?)";
        Object[] params = {randomNumbers, ballNumbers, ballNumbersMegaBall, drawDates, megaPlier};
        jdbcTemplate.update(sql, params);

其中ballNumbers 和ballNumbersMegaBall 是ArrayList。用 2 位数字填充。

这是 PostgreSQL 表:

CREATE TABLE public.draw_result
(
id bigint NOT NULL,
draw_dates date, 
ball_numbers bigint[],
balls_with_mega_ball bigint[],
mega_plier bigint,
CONSTRAINT draw_result_pkey PRIMARY KEY (id)
)

这是来自 Springboot 的错误:

出现意外错误(类型=内部服务器错误,状态=500)。 PreparedStatementCallback;错误的 SQL 语法 [INSERT INTO draw_result (id, >ball_numbers, balls_with_mega_ball, draw_dates, mega_plier) VALUES(?, ?, ?, ?, >?)];嵌套异常是 org.postgresql.util.PSQLException: Can't infer the SQL >type to use for an instance of java.util.ArrayList。使用带有 >explicit Types 值的 setObject() 来指定要使用的类型。

【问题讨论】:

    标签: java spring postgresql jdbc spring-boot


    【解决方案1】:

    最近我遇到了类似的问题。我的解决方案:

    public void setDrawResult(BigInteger id, List<BigInteger> ballNumbers, List<BigInteger> ballsWithMegaBall, Date drawDates,BigInteger megaPlier){
    
        String sql = "INSERT INTO draw_result (id, ball_numbers,  balls_with_mega_ball, draw_dates, mega_plier) VALUES(?, ?, ?, ?, ?)";
        jdbcTemplate.update(sql
                , id
                , createSqlArray(ballNumbers)
                , createSqlArray(ballsWithMegaBall)
                , drawDates
                , megaPlier
        );
    }
    
    private java.sql.Array createSqlArray(List<BigInteger> list){
        java.sql.Array intArray = null;
        try {
            intArray = jdbcTemplate.getDataSource().getConnection().createArrayOf("bigint", list.toArray());
        } catch (SQLException ignore) {
        }
        return intArray;
    }
    

    【讨论】:

    • 应该以前写过这个。非常感谢。第二天我确实接受了你的回答,但没有写谢谢。所以,再次感谢。
    猜你喜欢
    • 2012-04-03
    • 2022-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多