Ho restituito la procedura Db2 che restituisce il cursore per una tabella.Come risolvere l'eccezione verificatasi durante il recupero di CURSOR dall'istruzione Callable in Java?
Questa procedura viene chiamata dal mio codice Java e centratura per recuperare cursore come un set di risultati e avere log eccezione SQLException fluente,
com.ibm.db2.jcc.am.jo: [jcc][t4][10335][10366][4.7.85]
Invalid operation: Connection is closed. ERRORCODE=-4470, SQLSTATE=08003
at com.ibm.db2.jcc.am.dd.a(dd.java:666)
at com.ibm.db2.jcc.am.dd.a(dd.java:60)
Ho cercato una soluzione per questa eccezione e ho trovato questa soluzione sul sito web IBM link che suggerire di modificare la configurazione del registro,
Aumentare la dimensione del file di registro e il numero di file di registro primario e secondario . Il valore num_log_span può anche essere regolato.
Ecco procedura di esempio,
CREATE OR REPLACE PROCEDURE ABC(c_dump OUT SYS_REFCURSOR) IS
BEGIN
open c_dump FOR
select feild1,feild1,.... from RSPNSE_TABLE;
END;
codice Java è riportata qui sotto,
public void callStoredProc(){
Connection dbConnection = null;
CallableStatement callableStatement = null;
ResultSet rs = null;
String proc = "{call ABC(?)}";
try {
dbConnection = connection;
callableStatement = dbConnection.prepareCall(proc);
callableStatement.registerOutParameter(1, DB2Types.CURSOR);
// execute getDBUSERCursor store procedure
callableStatement.executeUpdate();
// get cursor and cast it to ResultSet
rs = (ResultSet) callableStatement.getObject(1);
} catch (SQLException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
Ora, in questo codice Java sta rompendo in questa linea callableStatement = dbConnection.prepareCall(proc);
Nota: Nonostante il registro delle eccezioni contenga "Connessione chiusa" testo Voglio dire che ho stabilito con successo la connessione con il recupero normale del database usando JDBC non ha problemi.
L'autista dice che la connessione è chiusa, tu dici che non lo è; a chi credere? Potresti voler chiamare 'isClosed()' o 'isValid()' sulla connessione appena prima di 'prepareCall()'? – mustaccio
Potete fornire prodotti usati e numeri di versione? Server OS, driver DB2 e JDBC? –