将java字符串[]设置为postgres准备语句时出错

将java字符串[]设置为postgres准备语句时出错,java,postgresql,jdbc,Java,Postgresql,Jdbc,我试图在Postgres中插入一个字符串数组。我从Postgres收到一个无效的类型错误 public static void main(String[] args) throws SQLException { String[] skus = { "0514", "0414", "0314", "0214", "0114", "1213", "1113", "1013", "0913", "0813", "0713", "0613" }; String sqlString = "

我试图在Postgres中插入一个字符串数组。我从Postgres收到一个无效的类型错误

public static void main(String[] args) throws SQLException {
    String[] skus = { "0514", "0414", "0314", "0214", "0114", "1213", "1113", "1013", "0913", "0813", "0713", "0613" };
    String sqlString = "Insert into dbo.Inventory_Metrics skus values(?)";
    Connection conn = DriverManager.getConnection(getPostgresConnUrl());
    PreparedStatement ps = conn.prepareStatement(sqlString);

    //THIS NEXT LINE THROWS AN ERROR

    ps.setObject(1, skus, java.sql.Types.NVARCHAR, skus.length);
    int status = ps.executeUpdate();
    ps.close();

    System.out.print(status);
}
public static String getPostgresConnUrl() {
    String database = "mycode";
    String userName = "xxxxxxxx";
    String password = "xxxxxxxx";
    return "jdbc:postgresql://192.168.0.50:5432/" + database + "?user=" + userName + "&password=" + password;

}
您必须根据文档使用

您不能在JDBC中只使用
setObject
数组。如果这就是它的工作原理,那就太好了,但事实并非如此。您需要专门处理数组

Array jdbcSkus = con.createArrayOf("VARCHAR", skus);
pstmt.setArray(2, jdbcSkus);

但您只有一个问号和一组值。您可以尝试使用逗号分隔的字符串来代替。JDBCAPI不是这样工作的。请描述你想要实现的目标。最重要的是:PostgreSQL不支持
NVARCHAR
类型afaikps.setObject(1,skus,java.sql.Types.VARCHAR,skus.length)//修复错误,将其作为答案发布。几乎相同的重新发布位置。(+1,感谢您提供了代码和错误消息。将来,所有问题中都应该包括您的PostgreSQL和PgJDBC版本)。@Nathanhughs您删除了答案-大多数DBMS支持本机数组,如果您可以避免的话。同意,只是不清楚OP想要什么。我认为nvarchar是正确的,并同意这一点,然后当我看到马克的评论时删除了它。对于避免使用逗号分隔的数据,我完全同意(几乎从来都不可能有足够强的措辞)。但不确定数组是否更好。