Обсуждение: 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.