0

I'm trying to generate placeholders in clause IN then set values. It seems working but finally returns one less row. I can't use setArray method as it's Oracle and I can't modify db. Code below.

public void loadObject(Connection connection, number1, number2, commentCodeList)  throws SQLException{
    String sqlToFind = "SELECT DISTINCT ccommid FROM COMMENT WHERE number = ? \n" +
            "AND number2 = ? AND ccommid IN (%s)";

    String sql = String.format(sqlToFind, preparePlaceHolders(commentCodeList.size()));

    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setInt(1, number1);
    preparedStatement.setInt(2, number2);
    setValues(preparedStatement, commentCodeList.toArray());

    ResultSet resultSet = preparedStatement.executeQuery();

    while(resultSet.next()){
        Comment comment = new Comment();
        comment.setCcommid(resultSet.getString(1));
        commentList.add(comment);
    }
}

private String preparePlaceHolders(int size){
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < size;) {
        builder.append("?");
        if (++i < size) {
            builder.append(",");
        }
    }
    return builder.toString();
}

public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException {
    for (int i = 0; i < values.length; i++) {
        preparedStatement.setObject(i + 3, values[i]);
    }
}
Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
Adrian K
  • 1
  • 1

0 Answers0