Questo potrebbe essere causato da una serie di motivi, incluso il driver che si sta utilizzando.
a) Alcuni driver non consentono istruzioni nidificate. A seconda che il driver supporti JDBC 3.0, è necessario controllare il terzo parametro durante la creazione dell'oggetto Statement. Per esempio, ho avuto lo stesso problema con il driver JayBird su Firebird, ma il codice ha funzionato bene con il driver Postgres. Poi ho aggiunto il terzo parametro alla chiamata del metodo createStatement e l'ho impostato su ResultSet.HOLD_CURSORS_OVER_COMMIT, e il codice ha iniziato a funzionare bene anche per Firebird.
static void testNestedRS() throws SQLException {
Connection con =null;
try {
// GET A CONNECTION
con = ConexionDesdeArchivo.obtenerConexion("examen-dest");
String sql1 = "select * from reportes_clasificacion";
Statement st1 = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY,
ResultSet.HOLD_CURSORS_OVER_COMMIT);
ResultSet rs1 = null;
try {
// EXECUTE THE FIRST QRY
rs1 = st1.executeQuery(sql1);
while (rs1.next()) {
// THIS LINE WILL BE PRINTED JUST ONCE ON
// SOME DRIVERS UNLESS YOU CREATE THE STATEMENT
// WITH 3 PARAMETERS USING
// ResultSet.HOLD_CURSORS_OVER_COMMIT
System.out.println("ST1 Row #: " + rs1.getRow());
String sql2 = "select * from reportes";
Statement st2 = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
// EXECUTE THE SECOND QRY. THIS CLOSES THE FIRST
// ResultSet ON SOME DRIVERS WITHOUT USING
// ResultSet.HOLD_CURSORS_OVER_COMMIT
st2.executeQuery(sql2);
st2.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs1.close();
st1.close();
}
} catch (SQLException e) {
} finally {
con.close();
}
}
b) Potrebbe esserci un errore nel codice. Ricordare che non è possibile riutilizzare l'oggetto Statement, una volta eseguita nuovamente una query sullo stesso oggetto istruzione, vengono chiusi tutti i gruppi di risultati aperti associati all'istruzione. Assicurati di non chiudere la dichiarazione.
Aggiungere un elenco del codice. – JeeBee