IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

java.sql.SQLException: ORA-01000: Nombre maximum de curseurs ouverts atteint


Sujet :

JDBC Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 314
    Points : 206
    Points
    206
    Par défaut java.sql.SQLException: ORA-01000: Nombre maximum de curseurs ouverts atteint
    Bonjour,

    j'effectue une boucle while dans laquelle des insertions sont effectuées en base de données.
    Au bout du 50eme enregistrements je reçois ce message d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.sql.SQLException: ORA-01000: Nombre maximum de curseurs ouverts atteint
    Voici mon code
    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
     
    for(int i=0; i<data.size(); i++)
    		{
    			/*(no_courrier, date_tampon, date_enr, nom, prenom, origine," +
    					"structure, titre, objet, precisions, tiers, date_redac, destinataires, annotation_maire," +
    					"copie, annotation_bis, reponse, reponse_comp, gestion, delai_rep, delai_rep_comp, source)" +*/
    			requete = "insert into courrier(no_courrier, date_tampon, date_enr, nom, prenom, no_origine," +
    					"structure, titre, no_objet, precisions, tiers, date_redac, destinataires, annotation_maire," +
    					"copie, annotation_bis, reponse, reponse_comp, gestion, delai_rep, delai_rep_comp, source) "+
    					"values("+i+",'"+data.get(i).getDateTampon()+"','"+data.get(i).getDateEnr()
    					+"','"+data.get(i).getNom()+"','"+data.get(i).getPrenom()+"','"+data.get(i).getOrigine()
    					+"','"+data.get(i).getStructure()+"','"+data.get(i).getTitre()+"','"+data.get(i).getObjet()
    					+"','"+data.get(i).getPrecision()+"','"+data.get(i).getTiers()+"','"+data.get(i).getDateRedac()
    					+"','"+data.get(i).getDestinataire()+"','"+data.get(i).getAnnotMaire()+"','"+data.get(i).getCopie()
    					+"','"+data.get(i).getAnnotAbs()+"','"+data.get(i).getReponseMaire()+"','"+data.get(i).getReponseComp()
    					+"','"+data.get(i).getGestcourrier()+"','"+data.get(i).getDelaiMaire()+"','"+data.get(i).getDelaiComp()
    					+"','"+data.get(i).getSource()+"')";
    			System.out.println(requete);
    			rs = db.execRequete(requete);
     
    		}
    Quelqu'un aurait une idéé ?

    Merci.
    Nulla dies sin linea

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 352
    Points : 445
    Points
    445
    Par défaut
    Et si tu rajoutes un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.close() en fin de chque itération
    ?

    Sinon dans quel environnement exécutes-tu ton code ?

    Jacques Desmazières

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 314
    Points : 206
    Points
    206
    Par défaut
    j'utilise eclipse comme environnement de développement et le jre 1.5.
    Pour ce qui est du rs.close().
    J'avais déjà tenté d'effectué cette manipulation, cependant j'ai toujours le même problème...
    Nulla dies sin linea

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 352
    Points : 445
    Points
    445
    Par défaut
    Je me souviens que mes équipes ont déjà rencontré ce problème, et l'ajout du close() (sur rs il me semble) avait amélioré les choses, mais que lorsque le nombre d'éléments étaient très importants, ils ont dû rajouter des fermeture de la connexion a intervalle régulier (si je me souviens, de l'ordre de 50 inserts).

    Sinon, si tu utilises un datasource ou tout autre framework permettant de faire un pool sur les PreparedStatement, il faut savoir que chaque PreparedStatement en cache est associé à un curseur Oracle, donc si tu configures ton PreparedStatementCache > 100 il est normal d'avoir ce type de problème.

    Jacques Desmazières

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Il me semble que tu devrais t'intéresser sérieusement au PreparedStatement ... parce que ce que tu fais là n'est pas top du tout...
    En attendant, peux-tu montrer le code de "db.execRequete" ?
    Autre question, quelle base de données utilises-tu ?
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 314
    Points : 206
    Points
    206
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public ResultSet execRequete(String requete)
    	{
     
    		try {
    			 return con.createStatement().executeQuery(requete);
     
    		} 
    		catch (SQLException e) {
    			System.err.println("ERREUR d'exécution()"  + e);
    			return null;
    		}
    	}
    Nulla dies sin linea

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 314
    Points : 206
    Points
    206
    Par défaut
    Béni soit le PreparedStatement.

    Merci.
    Nulla dies sin linea

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Doctrine] ORA-0100 nombre maximum de curseurs ouverts dépassé :
    Par Tyra3l dans le forum ORM
    Réponses: 5
    Dernier message: 02/07/2011, 22h50
  2. ORA-01000: nombre maximum de curseurs ouverts dépassé
    Par opensource dans le forum Débuter
    Réponses: 3
    Dernier message: 20/04/2011, 13h30
  3. ORA-01000: Nombre maximum de curseurs ouverts atteint
    Par nihilist dans le forum Oracle
    Réponses: 2
    Dernier message: 18/08/2010, 12h08
  4. ORA-01000: nombre maximum de curseurs ouverts dépassé
    Par ouadie99 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 01/09/2008, 10h03
  5. Réponses: 4
    Dernier message: 10/07/2007, 15h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo