Thread: NPE sent by driver when ResultSet's connection is closed, proposed patch
NPE sent by driver when ResultSet's connection is closed, proposed patch
From
Guillaume Cottenceau
Date:
Hi, I am having some trouble with java.sql.ResultSet being "closed" when it should not in our application, and it has shown what is I think a bug in the driver. When the ResultSet is "closed", and I fire #next, I receive an SQLException complaining that the connection is closed. But when I fire #first, I receive a NullPointerException from driver code, which is incorrect since java.sql.ResultSet states that #first only throws SQLException. I have seen this problem in stable version but have verified in CVS code that it should still happen, since the attribute "rows" is not tested for null value, as is done in #next. Follows a proposed patch, however from a quick reading of the code I think there is more missing (#afterLast, #beforeFirst..) --- postgres/pgjdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java 2004-11-19 04:18:51.000000000 +0100 +++ ./AbstractJdbc2ResultSet.java 2004-12-17 10:30:37.062117093 +0100 @@ -257,6 +257,9 @@ public boolean first() throws SQLException { + if (rows == null) + throw new PSQLException(GT.tr("This ResultSet is closed."), PSQLState.CONNECTION_DOES_NOT_EXIST); + checkScrollable(); if (rows.size() <= 0) -- Guillaume Cottenceau
On Fri, 17 Dec 2004, Guillaume Cottenceau wrote: > I am having some trouble with java.sql.ResultSet being "closed" > when it should not in our application, and it has shown what is I > think a bug in the driver. > > When the ResultSet is "closed", and I fire #next, I receive an > SQLException complaining that the connection is closed. But when > I fire #first, I receive a NullPointerException from driver code, > which is incorrect since java.sql.ResultSet states that #first > only throws SQLException. Well, no one really declares throwing NPE because it's a RuntimeException, but yes this is a bug and has been on the todo list for a while. Your complaint has motivated me to do this and I've committed a hopefully complete fix to this whole class of problems to the cvs repository. Kris Jurka