Обсуждение: BUG #2636: JDBC error behaviour incorrect
The following bug has been logged online: Bug reference: 2636 Logged by: Kiren Pillay Email address: kiren.pillay@standardbank.co.za PostgreSQL version: 8.1.4 Operating system: Windows Description: JDBC error behaviour incorrect Details: Hi Here is my code snippet: <-- public Hashtable retrieveApplicationParameters() { PreparedStatement ps = null; ResultSet rs = null; String loadApplicationParameters = " SELECT key_id, key_value FROM application_parameters WHERE is_active = 1"; Hashtable values = new Hashtable(); try { DBActions db=DBActions.getInstance(); rs = db.getConnection().prepareCall(loadApplicationParameters ).executeQuery(); while (rs.next()) { // Testing values.put(rs.getString(1), rs.getString(2)); System.out.println(rs.getString(1)+","+ rs.getString(2)); } } catch (SQLException sqle) { logger.error("Could not load application parameters ", sqle); } catch (Exception e){ e.printStackTrace(); } catch (Throwable e){ e.printStackTrace(); } /*finally { DBConnection.close(rs, ps); }*/ return values; } --> In this code, the program gets to the executeQuery part with no exception. When it gets to the rs.next() part, the code jumps to the finally block. This is non-deterministic behaviour as the code seems to have thrown an exception, but even the catch Throwable part does not catch the error. The database being connected to is a restore from another database. The fact is this database restore could be incorrect, but how can I find the actual error cause of the problem. Is there a way to increase the logging so that I can figure out the problem here. Sorry I can't give more info than this until i can learn how to turn the debugging for the jdbc driver and so on.
On Mon, 18 Sep 2006, Kiren Pillay wrote: > The following bug has been logged online: > > Bug reference: 2636 > PostgreSQL version: 8.1.4 > Operating system: Windows > Description: JDBC error behaviour incorrect > Details: > > try { > DBActions db=DBActions.getInstance(); > > > rs = db.getConnection().prepareCall(loadApplicationParameters > ).executeQuery(); > while (rs.next()) { > // Testing > values.put(rs.getString(1), rs.getString(2)); > System.out.println(rs.getString(1)+","+ rs.getString(2)); > } > } catch (SQLException sqle) { > logger.error("Could not load application parameters ", sqle); > } > catch (Exception e){ > e.printStackTrace(); > } > catch (Throwable e){ > e.printStackTrace(); > } > /*finally { > > DBConnection.close(rs, ps); > }*/ > > > In this code, the program gets to the executeQuery part with no exception. > When it gets to the rs.next() part, the code jumps to the finally block. > This is non-deterministic behaviour as the code seems to have thrown an > exception, but even the catch Throwable part does not catch the error. Isn't it just likely that rs.next() returned false? > The database being connected to is a restore from another database. The fact > is this database restore could be incorrect, but how can I find the actual > error > cause of the problem. Is there a way to increase the logging so that I can > figure out the problem here. The driver can be started given a URL connection parameter ?loglevel=2 that will print out a fair amount of protocol information.