windu.2b Posted February 22, 2008 Share Posted February 22, 2008 Bonsoir à tous, J'ai semble-t-il un "petit" problème lors de l'exécution de requêtes SQL : au bout d'un moment, je me ramasse l'erreur suivante : java.sql.SQLException: ORA-01000: Nombre maximum de curseurs ouverts atteint Pourtant, toutes mes requêtes sont de cette forme : ResultSet result = null; try { // requete SQL exécutée } catch(SQLException e) {} finally { try { if( result != null ) { //System.out.println( result ); result.close(); } } catch ( SQLException e ) { // TODO Auto-generated catch block e.printStackTrace(); } manager.closeStatement(); } Donc je referme bien le ResultSet à chaque fois... Et la dernière ligne sert à refermer le Statement Où se situerait mon problème ? Link to comment Share on other sites More sharing options...
Sentinel Posted February 23, 2008 Share Posted February 23, 2008 Peut-être dans le "manager.closeStatement()" ? Mais bon, de toute façon tu fermes manuellement le resultset avant... Selon la doc de resultset : Note: A ResultSet object is automatically closed by the Statement object that generated it when that Statement object is closed, re-executed, or is used to retrieve the next result from a sequence of multiple results. A ResultSet object is also automatically closed when it is garbage collected. Et celle de Statement : When a Statement object is closed, its current ResultSet object, if one exists, is also closed. En tout cas je ne vois pas la faille dans ton code, sauf si ton "manager" lève des exceptions, car lever des exceptions depuis un bloc finally, caymal. Link to comment Share on other sites More sharing options...
windu.2b Posted February 29, 2008 Author Share Posted February 29, 2008 Bon finalement, j'ai repris tous mes finally, j'ai modifié en mettant ceci : finally { try { if( result != null ) { manager.closeStatement(); result.getStatement().close(); result.close(); result = null; } } catch ( SQLException e ) { throw e; } } Pour être sûr (et plus par précaution qu'autre chose car les tests semblaient concluants avant cela), j'ai même foutu des "manager.closeAllStatements()" (méthode que j'ai créé moi-même mais dont le nom me semble suffisamment explicite) à des endroits où je suis sûr que je ne risque rien de tout refermer, et ça a l'air bon... Bref, sujet clos ! Merci Sentinel Link to comment Share on other sites More sharing options...
Sentinel Posted February 29, 2008 Share Posted February 29, 2008 Non c'est encore pire, il ne faut jamais lever d'exceptions depuis un bloc "finally" ! Ca casse la pile d'appel de la méthode, et tu risques d'avoir des bugs totalement intraçables au runtime... Il vaut mieux loguer les éventuelles exceptions et les "étouffer" plutôt que de les relancer depuis un finally Link to comment Share on other sites More sharing options...
windu.2b Posted February 29, 2008 Author Share Posted February 29, 2008 Ah... bon, ben je regarderai ça dans la semaine alors Parce que l'appli corrigée est déjà repartie au client (mais il va faire de sretours, donc j'esayerai de "corriger" ça en même temps). Merci pour l'info Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.