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 :

[JDBC]Probleme curseur SQL


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut [JDBC]Probleme curseur SQL
    Bonjour, je suis sur une appli qui attaque une BD ACCESS mais j'ai deux requêtes qui me retournent état de curseur non valide

    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
     
    Statement s1 = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            			String req = "Select Count(*) from chrono where noConcurrent="+numconcu+" And noEtape="+var3;
            			ResultSet result = s1.executeQuery(req);
            			result.next();
            			int cpt = result.getInt(1);
            			if (cpt==1){
            				mess.showMessageDialog(null,"Vous avez déjà rentré un temps pour ce concurrent","Avertissement",JOptionPane.ERROR_MESSAGE);
            			}
            			else{
            				PreparedStatement st = connect.prepareStatement("Insert into Chrono(noEtape, noConcurrent, temps) Values (?,?,?)");
            				st.setInt(1, var3);
            				st.setInt(2, numconcu);
            				st.setFloat(3, letemps);
            				st.executeUpdate();
            				st.close();
            				connect.close();
            				temps.setText("");
            			}
            			result.close();
            		}
    Ici, la requete doit me retourner soit 1 soit 0. Quand c'est 1, pas de problème mais pour 0 çà met l'erreur.

    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
     
    Statement stab = connect.createStatement();
          		String bdtab = "Create table Classement(nom text, temps float)";
          		stab.execute(bdtab);
          		stab.close();
     
          		Statement s1 = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
          		String req1 = "Select concurrent.nom, SUM(chrono.temps) As Somme FROM concurrent, chrono Where concurrent.numero=chrono.noConcurrent Group by concurrent.nom";
          		ResultSet rs = s1.executeQuery(req1);
          		while (rs.next()){
          			var1= rs.getString(1);
          			float var2 = rs.getFloat(2);
          			PreparedStatement st = connect.prepareStatement("Insert into Classement(nom, temps) Values (?,?)");
          			st.setString(1, var1);
        			st.setFloat(2, var2);
        			st.executeUpdate();
        			st.close();
        	  	}
        		rs.close();
     
                  String unnom = new String();
        		float untemps;
     
        		Statement s2 = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        		String req2 = "Select nom, temps From Classement order by temps";      		
        		ResultSet rs2 = s2.executeQuery(req2);
        		while(rs2.next()){
        			unnom=rs2.getString(1);
        			untemps=rs2.getFloat(2);
        			listeclass.add(""+rs2.getRow()+"   "+unnom+" avec un temps cumulé de "+untemps+"");
        		}
    rs2.close();
    			connect.close();
    J'ai la même erreur ici sur le getString et le getFloat (enfin c la qu'Eclipse pointe) sauf que bizarrement çà marche mais le code apres le rs.close ne se marche pas. Je ne sais pas si c'est à cause de cette erreur.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Ca vient de ta fermeture de connection dans le else.
    Tu ferme la connection avant de fermer le resulSet et ca java il aime pas je crois. D'ailleurs c pas tres logique de faire comme ca.
    Il faut respecter un certain ordre pour la fermeture.
    ResultSet.close()
    Statement.close()
    Connection.close()
    Mess with the best, die like the rest!

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    L'erreur ne vient pas de la, mais merci de me l'avoir fait remarqué.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Le select Count, c'est pour vérifier l'existence d'un enregistrement. Avant j'étais parti sur la méthode execute qui retourne un booléen en qu'il y ait un resulrset ou pas. Mais dans tout les cas çà me retournait vrai, c'est pour çà que je suis passé au select count

  5. #5
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Mais au fait qu'elle est ton erreur, si tu nous le disais ça pourrait peut-être nous aider !!!

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Je l'ai dit au début, pour les deux requêtes çà me fait etat de curseur non valide

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Je l'ai pas dit mais les deux parties du code ne sont pas dans la même méthode.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    J'ai beau lire et relire, je ne vois pas d'ou l'erreur peut venir.
    Donne voir le message et la ligne exact de l'erreur plz.
    Mess with the best, die like the rest!

  9. #9
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Points : 145
    Points
    145
    Par défaut
    ca me rappelle de mauvais souvenirs ces histoires de pointeurs non-valides. as-tu essayé de faire des tests pour que ces requêtes soient lancées dans un ordre différent?
    ce problème n'arrive t-il que avec ces deux requêtes ?

    une cause possible peut etre le fait d'un trop grand nombre de connections non fermées (par close) dans l'execution du programme.
    il pourrai etre interessant de savoir par java combien de connections sont actives sur ta bdd. (je ne sais pas si c'est possible)

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Pour le premier code, c'est sur int cpt = result.getInt(1) dans le statement s1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    java.sql.SQLException: [Microsoft][Gestionnaire de pilotes ODBC] État de curseur non valide
    	at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
    	at Frame.valid_actionPerformed(Frame.java:162)
    	at Frame$1.actionPerformed(Frame.java:54)
    Pour le second code, c'est sur var1= rs.getString(1) et float var2 = rs.getFloat(2), dans la boucle while rs.next()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    java.sql.SQLException: [Microsoft][Gestionnaire de pilotes ODBC] État de curseur non valide
    	at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    	at Frame.remplirliste(Frame.java:217)
    	at Frame.jbInit(Frame.java:107)
    	at Frame.<init>(Frame.java:38)
    	at Frame.main(Frame.java:112)

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Désolé je ne vois toujours pas.
    Mais vérifie comme dit Pierre, qu'à chaque fois que tu ouvres qqchose, tu le refermes quand tu n'en a plus besoin. Surtout en ce qui concerne les connexion à la base.
    Mess with the best, die like the rest!

  12. #12
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Points : 145
    Points
    145
    Par défaut
    il pourrai etre interessant de savoir par java combien de connections sont actives sur ta bdd. (je ne sais pas si c'est possible)
    au risque de dévier un chouilla du sujet, ca serait bien si quelqu'un savait comment "ecouter" la base avec jdbc (connaitre le nb de connections actives pourrait par exemple servir pour diagnostiquer le problème de Welldone)

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    J'ai résolu le problème pour le premier code avec le select Count avec le try/catch. S'il y a erreur dans cette requete, puisqu'elle sert à vérifier l'existence d'un enregisterment, alors çà veut qu'il n'existe pas et je met la requete d'insertion dans le catch. Allez un en moins

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    J'ai résolu l'autre partie en divisant la requete en plusieurs morceaux et en récupérant dans chaque requête ce qui m'intéressait. Je pens que c'est à cause des jointures que çà ne marchait pas.
    Merci à ceux qui m'ont aidé.

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

Discussions similaires

  1. [JDBC]probleme avec requête sql
    Par lkryss dans le forum JDBC
    Réponses: 16
    Dernier message: 10/06/2006, 01h44
  2. [jdbc] connexion impossible à sql server
    Par hari dans le forum Eclipse Java
    Réponses: 9
    Dernier message: 01/04/2005, 18h27
  3. Réponses: 4
    Dernier message: 15/01/2005, 16h05
  4. [JDBC][Access] Transaction SQL sur MS Access?
    Par Twofy dans le forum JDBC
    Réponses: 2
    Dernier message: 19/08/2004, 14h46
  5. Réponses: 13
    Dernier message: 10/05/2004, 16h49

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