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 :

Nombre maximum de curseurs ouverts atteint


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Points : 70
    Points
    70
    Par défaut Nombre maximum de curseurs ouverts atteint
    Bonjour a tous,

    alors voila j'ai un petit problème dans l'exécution de requête. j'exécute plusieurs requêtes en suivant par l'intermédiaire de boucle. tout fonctionne pour le mieux lorsque les résultats des requête ne sont pas trop grand mais sinon j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    java.sql.SQLException: ORA-00604: Une erreur s'est produite au niveau SQL récursif 1
    ORA-01000: Nombre maximum de curseurs ouverts atteint
    j'ai entendu parler des preparedStatement ou des rs.close() qui pourrai résoudre ce problème.

    quelqu'un pourrai-t-il éclairer ma lanterne.

    merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Points : 70
    Points
    70
    Par défaut
    en faite rien n'y fait j'ai toujours le même problème avec rs.close() et preparedStatement

    je sais plus quoi faire.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il faut en effet libérer les ressources utilisé par la base de données, en appelant les méthodes close() des différents éléments concernés (Connection, Statement, ResultSet), et cela dès que tu n'en a plus besoin.

    Il est conseillé d'utiliser des try/finally pour s'assurer que cela est bien fait dans tous les cas, comme indiqué dans la FAQ : Comment libérer proprement les ressources ?
    (l'exemple porte sur des fichiers, mais c'est le même principe)




    Les PreparedStatements n'ont rien à voir avec cela, mais il te permettent de simplifier le passage des objets dans la requête en évitant tout problème d'injection...


    a++


    [edit] On a posté en même temps : montre ton code !

  4. #4
    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
    Peux-tu montrer le code en cause, ça ira certainement plus vite...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Points : 70
    Points
    70
    Par défaut
    désolé le code c'est plutôt celui ci

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    public String[][] requeteTab(String[] soumission, Vector entete){
    		ConnexionBD con = new ConnexionBD();
     
    		String[][] tab=null;
     
    		String tmp = new String(" and (submission_id='"+soumission[0]+"'");
     
    		String querySample = new String();
    		String queryMethod = new String();
    		String queryComponent = new String();
    		String queryTask = new String();
     
    		querySample="select distinct(sample_id), submission_id from nais_tasks where submission_id='"+soumission[0]+"'";
    		for(int i=1; i<soumission.length; i++){
    			querySample=querySample+" or submission_id='"+soumission[i]+"'";
    			tmp=tmp+" or submission_id='"+soumission[i]+"'";
    		}
    		tmp=tmp+")";
    		System.out.print(querySample);
     
    		try{
    			System.out.println("La connexion s'ouvre :"+con.connexion());
    			Statement st = con.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    			ResultSet resultSample=st.executeQuery(querySample);
     
    			int i = 0;
    			while(resultSample.next()){
    				 i++;
    			}
     
    			tab = new String[i][entete.size()];
     
    			for(int x=0; x<tab.length; x++){
    				for(int y=0; y<tab[0].length; y++){
    					tab[x][y]="x";
    				}
    			}
     
    			System.out.println(entete.size());
    			System.out.print(tab[0].length);
     
    			resultSample.beforeFirst();
     
    			int a=0, b=0;
     
    			while(resultSample.next()){
    				tab[a][b]=resultSample.getString(2);
    				b++;
    				tab[a][b]=resultSample.getString(1);
    				b++;
     
    				queryMethod = "select distinct(method), operation from nais_tasks where operation is not null and sample_id='"+resultSample.getString(1)+"'"+tmp;
    				Statement st2 = con.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    				ResultSet resultMethod=st2.executeQuery(queryMethod);
     
    				queryMethod=queryMethod+" order by method";
     
    				System.out.println(queryMethod);
     
    				while(resultMethod.next()){
    					queryTask = "select task_id from nais_tasks where sample_id='"+resultSample.getString(1)+"' and operation='"+resultMethod.getString(2)+"'"+tmp;
    					Statement st3 = con.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    					ResultSet resultTask=st3.executeQuery(queryTask);
     
    					resultTask.next();
    					queryComponent="Select distinct(component), text_value, units from nais_results where task_id='"+resultTask.getString(1)+"'";
    					while(resultTask.next()){
    						queryComponent=queryComponent+" or task_id='"+resultTask.getString(1)+"'";
    					}
     
    					Statement st4 = con.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    					ResultSet resultComponent=st4.executeQuery(queryComponent);
     
    					System.out.println(queryComponent);
     
    					for(int c=0; c<tab[0].length; c++){
    						if(resultMethod.getString(1).equals(entete.elementAt(c).toString()) && resultMethod.getString(2).equals(entete.elementAt(c+1).toString())){
    							b=c;
    							tab[a][b]=resultMethod.getString(1);
    							b++;
    							tab[a][b]=resultMethod.getString(2);
    							b++;
     
    							int ind= b;
    							while(resultComponent.next()){
    								while(b<tab[0].length && entete.elementAt(b).toString().toLowerCase().equals(entete.elementAt(b).toString())){
    									if(resultComponent.getString(1).toLowerCase().equals(entete.elementAt(b).toString())){
    										tab[a][b]=resultComponent.getString(1);
    										b++;
    										tab[a][b]=resultComponent.getString(2);
    										b++;
    										tab[a][b]=resultComponent.getString(3);
    										b++;
     
    									}
    									else{
    										b=b+3;
    									}
    								}
    								b=ind;
    							}
    						}
     
     
    					}
    				}
    				b=0;
    				a++;
     
    			}
     
    		}catch(SQLException e){
    			System.out.print(e);
    		}catch(Exception ex){
    			System.out.print(ex);
    		}
     
    		//fermeture de la connexion a la base de donnée
    		try{
    			System.out.println("La connexion se ferme :"+con.closeConnexion());
    		}catch(Exception ex){
    			System.out.println(ex);
    		}
     
    		for(int x=0; x<tab.length; x++){
    			for(int y=0; y<tab[0].length; y++){
    				System.out.print(tab[x][y]+" / ");
    			}
    			System.out.println("");
    		}
     
    		return tab;
     
    	}
    je sais c'est codé comme un boucher ^^

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Il n'y a pas un seul appel à close() dans ce code

    Lis bien la Q/R de la FAQ de mon précédent message

    a++

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Points : 70
    Points
    70
    Par défaut
    oui merci vive les close()

    merci a vous 2 ++

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

Discussions similaires

  1. 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
  2. ORA-01000: Nombre maximum de curseurs ouverts atteint
    Par nihilist dans le forum Oracle
    Réponses: 2
    Dernier message: 18/08/2010, 12h08
  3. Réponses: 7
    Dernier message: 02/07/2008, 14h17
  4. Réponses: 6
    Dernier message: 17/09/2007, 12h50
  5. [Oracle] Nombre maximum de curseurs ouverts atteint
    Par lionheart33806 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/10/2006, 12h06

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