[英]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.