Java数组插入Postgres的

问题描述:

我试图将Java数组Postgres的,并得到了以下错误:下面Java数组插入Postgres的

Exception in thread "main" org.postgresql.util.PSQLException: No value specified for parameter 2

代码:

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

    //This next line throws the error 
    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://xxx.xxx.xxx.xxx:xxxx/" + database + "?user=" + 
     userName + "&password=" + password; 
} 
+0

有一个错字。您正在设置第一个参数两次。 – lifus 2014-09-23 19:23:51

看看第二ps.setObject()它设置第一第二次参数。

它应该阅读

ps.setObject(1, sku); 
ps.setObject(2, cross, java.sql.Types.VARCHAR, cross.length); 

您还没有指定的PreparedStatement的第二个参数。您是第一个参数重复值的两倍

ps.setObject(1, sku); 
ps.setObject(1, cross, java.sql.Types.VARCHAR, cross.length); 

应该

ps.setObject(1, sku); 
ps.setObject(2, cross, java.sql.Types.VARCHAR, cross.length);