Bonjour,
je suis un utilisateur relativement novice en JDBC et j'ai un problème que je n'arrive pas à résoudre.
J'ai développé une application JDBC donc et j'obtiens l'erreur oracle : ORA-01000: maximum open cursors exceeded
Après vérification de l'erreur, c'est que mon nombre de curseur ouvert est trop important.
Je vérifie mon code, je les ferme tous de suite après utilisation.
Par contre dans Oracle, ils apparaissent toujours comme ouverts.
On dirait que le close est sans effet.
Mon application étant complexe et les appels à JDBC encapsulés dans une classe de gestion des accès à la database, voici le code simple que j'ai essayé pour tester l'effet des close():
Lors du premier sleep, le curseur est toujours ouvert dans oracle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 try { Class cOracleDriver; Driver dOracleDriver; cOracleDriver=Class.forName("oracle.jdbc.driver.OracleDriver"); dOracleDriver=(Driver) cOracleDriver.newInstance(); DriverManager.registerDriver(dOracleDriver); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@guzet.**.net:1521:mydb","user","mdp"); Statement st = con.createStatement(); ResultSet myRS; myRS = st.executeQuery("select 1 from dual"); st.close(); myRS.close(); System.out.println("endormi"); Thread.sleep(30000); System.out.println("reveillé"); con.close(); System.out.println("endormi"); Thread.sleep(30000); System.out.println("reveillé"); System.out.println("fin"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
Requête exécutée pour le vérifier :
SELECT * from v$open_cursor WHERE SID = 29;
Le numéro de SID est le bon, j'ai vérifié auparavant.
Lors du second sleep, la connexion est bien fermée, le curseur n'apparait plus.
J'utilise le driver fournit par Oracle et téléchargé à cette URL:
http://www.oracle.com/technology/sof.../jdbc9201.html
C'est la version pour Oracle 9.2.0.8 qui est la version de SGBD qu'on utilise.
J'utilise le JDK 1.6.
Les ordres SQL marchent bien quels qu'ils soient, j'ai juste ce problème de curseur qui restent ouverts.
Après avoir lu les FAQ et cherché sur le net, j'ai rien trouvé pour résoudre ce problème donc si vous pouviez m'aider (même si ce ne sont que des axes de recherche !), je vous en remercie d'avance !
Partager