簡體   English   中英

JDBC - 將數組變量插入 PostgreSQL 表

[英]JDBC - Inserting an array variable into a PostgreSQL table

我想在表中插入一個數組變量。 代碼如下所示

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

class PostgreSQLJDBC {

    public static void main(String args[]) {
        Connection c = null;
        Statement stmt = null;
        Statement stmt1 = null;
        int id[] = new int[3];
        int no = 1;
        id[0] = 2;
        id[1] = 14;
        id[2] = 4;
        try {
            Class.forName("org.postgresql.Driver");
            c = DriverManager
                    .getConnection("jdbc:postgresql://localhost:5432/ass2",
                            "postgres", "post");
            c.setAutoCommit(true);
            System.out.println("Opened database successfully");
            stmt = c.createStatement();
            String sql1 = "INSERT INTO COMPANY (NO,ID) "
                    + "VALUES (7, id);";
            stmt1 = c.createStatement();
            stmt1.executeUpdate(sql1);
            stmt1.close();
            c.close();
        } catch (Exception e) {
            System.err.println(e.getClass().getName() + ": " + e.getMessage());
            System.exit(0);
        }
        System.out.println("Operation done successfully");
    }
}

此代碼編譯但給出了 PSQLexception。

有人可以幫忙解決這個問題嗎

嘗試使用Prepared Statement以便您可以像這樣使用setArray

但首先你不能設置int[]你必須將它轉換為數組,所以你可以使用:

Integer[] id = {2, 14, 4};
Array array = connection.createArrayOf("INTEGER", id);

然后創建您的 Prepared Statement 並設置數組:

String sql = "INSERT INTO COMPANY (NO, ID) VALUES (?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(sql);) {

    pstmt.setInt(1, 7);   // Set NO
    pstmt.setArray(2, array);  // Set ID

    pstmt.executeUpdate();  // Execute the query
}

注意:請避免在PostgreSQL的表名和列名中使用大寫字母! 這可能會產生一些問題,而您的查詢應如下所示:

INSERT INTO company (no, id) VALUES (?, ?)

除了接受的答案:

根據這些文檔: https : //jdbc.postgresql.org/documentation/head/arrays.html

可以使用 PreparedStatement.setObject 方法將一些本機 java 數組用作准備好的語句的參數。

因此,如果您使用原始 int[] 而不是 Integer[] 和 setObject 而不是 setArray 它也可以工作。

int[] ids = {2, 14, 4};
String sql = "INSERT INTO TEST(id_array) VALUES (?)";
try (Connection con = dataSource.getDataSource(); 
     PreparedStatement statement = conn.prepareStatement(sql))
{
    statement .setObject(1, ids);  // setObject NOT setArray!
    statement .executeUpdate();
} 

這比調用 createArrayOf 方法更方便。 特別是如果您正在使用一些更高級別的框架 spring JDBCTemplate 並且想要插入 String[] 數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM