0
votes

I am trying to insert a java Array into postgres and get the following error:

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

Code below:

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; 
}
2
There is a typo. You are setting first parameter twice. - lifus

2 Answers

4
votes

Look at the second ps.setObject() it's setting the first parameter a second time.

It should read

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

You haven't specified the second parameter for the PreparedStatement. You are repeating the value for first parameter twice

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

should be

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