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]);
}
}