2016-12-23 6 views
1

Integer配列をPostgresqlテーブルに挿入する際に問題がありますが、どうすればよいですか?Java SpringbootでjdbcTemplateを使用して整数配列を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です:java.util.ArrayListのインスタンスに使用するSQL>型を推論することはできません。明示的な型の値を持つsetObject()を使用して、使用する型を指定します。

答えて

2

最近、同様の問題が発生しました。私の解決策:

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; 
} 
+0

これは前に書かれているはずです。どうもありがとう。私は翌日あなたの答えを受け入れましたが、感謝を書いていませんでした。だから、もう一度ありがとう。 – Amiko

+0

ニース、これは動作します! –

関連する問題