# HG changeset patch # User Martin van Dinther <martin.van.dinther@monetdbsolutions.com> # Date 1504791988 -7200 # Node ID 763150ec0a0ab1940754530950705d2cea53436a # Parent 8ea360b612de1a61b57824eae416ac166fc97dd1 Improve constructor by preventing NPE when rs == null and use findColumn() outside the for-loop so it is done only once. diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java b/src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java --- a/src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java +++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java @@ -150,18 +150,26 @@ public class MonetPreparedStatement // fill the arrays ResultSet rs = super.getResultSet(); - for (int i = 0; rs.next(); i++) { - monetdbType[i] = rs.getString("type"); - javaType[i] = MonetDriver.getJavaType(monetdbType[i]); - digits[i] = rs.getInt("digits"); - scale[i] = rs.getInt("scale"); - if (rscolcnt == 3) - continue; - schema[i] = rs.getString("schema"); - table[i] = rs.getString("table"); - column[i] = rs.getString("column"); + if (rs != null) { + int type_colnr = rs.findColumn("type"); + int digits_colnr = rs.findColumn("digits"); + int scale_colnr = rs.findColumn("scale"); + int schema_colnr = rs.findColumn("schema"); + int table_colnr = rs.findColumn("table"); + int column_colnr = rs.findColumn("column"); + for (int i = 0; rs.next(); i++) { + monetdbType[i] = rs.getString(type_colnr); + javaType[i] = MonetDriver.getJavaType(monetdbType[i]); + digits[i] = rs.getInt(digits_colnr); + scale[i] = rs.getInt(scale_colnr); + if (rscolcnt == 3) + continue; + schema[i] = rs.getString(schema_colnr); + table[i] = rs.getString(table_colnr); + column[i] = rs.getString(column_colnr); + } + rs.close(); } - rs.close(); // PreparedStatements are by default poolable poolable = true;