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 :

Incrémentation d'un éléments à insérer en base


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Responsable test de charge
    Inscrit en
    Février 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable test de charge

    Informations forums :
    Inscription : Février 2006
    Messages : 186
    Par défaut Incrémentation d'un éléments à insérer en base
    Bonjour,

    Je dispose d'un objet User. Cet objet contiens deux méthodes que je souhaite utiliser ensemble.

    La première est getNbUser, elle permet de recupérer le nombre d'éléments associés en base.

    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
     
    	public static int getNbUser(){
    		Connection cnx = Connexion.getCnx();
    		String rqt= "select count (*) from user";
    		int nbUser = 0;
    		try {
    			Statement stmt = cnx.createStatement();
    			ResultSet rs= stmt.executeQuery(rqt);
    			// execute(rqt);
    			while(rs.next()) {
    				nbUser = rs.getInt(1);
    				System.out.print("NbUser = "+ nbUser);
    			}
     
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}finally{
    			Connexion.closeCnx(cnx);
    		}
    		return nbUser;
    	}
    La seconde est insertUser, elle permet d'insérer un utlisateur en base.

    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
     
    public void insertUser(){
    	Connection c = Connexion.getCnx();
    	try {			
    		Statement stmt =c.createStatement();
    		//final int new_id = getNbUser()+1;
    		stmt.execute("INSERT INTO USER (id,login, password, droit) VALUES ("
    			+this.getId()  /*User.getNbUser()*/  +",'"
    			+this.getLogin() +"','"
    			+this.getPassword() +"','"
    			+this.getDroit() +"')");			
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}finally{
    			Connexion.closeCnx(c);
    		}
    	}
    Utiliser indépendemment, les deux sont fonctionnelles, néanmoins, lorsque je souhaite insérer un User dans la table correspondante en incrémentant l'id (champs INT(8) ), le fait d'utiliser les deux méthodes en les croisant me poses problèmes.

    Ci dessous l'erreur générée :

    com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888)
    at com.mysql.jdbc.Connection.checkClosed(Connection.java:1931)
    at com.mysql.jdbc.Connection.createStatement(Connection.java:3093)
    at com.mysql.jdbc.Connection.createStatement(Connection.java:3075)
    at bean.User.insertUser(User.java:75)
    at main.Main.main(Main.java:21)
    Une solution
    Merci

  2. #2
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Et qu'est ce qui te pose probleme?

    Tu veux utiliser getNbUser dans insertUser et inversement ? Et donc tu realises dans ce cas de la recursivite croisee .

    Dans ce cas revoie ta conception et isoles chaque cas d'utilisation.

    Ai-je bien compris ton probleme ?

  3. #3
    Membre éclairé
    Profil pro
    Responsable test de charge
    Inscrit en
    Février 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable test de charge

    Informations forums :
    Inscription : Février 2006
    Messages : 186
    Par défaut
    Problème résolu en modifiant la méthode insertUser tel que :

    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
    public void insertUser(){
     
    		String rqt = "INSERT INTO USER (id,login, password, droit) VALUES ("
    			+( User.getNbUser()+ 1) +",'"
    			+this.getLogin() +"','"
    			+this.getPassword() +"','"
    			+this.getDroit() +"')";
     
    		Connection c = Connexion.getCnx();
    		try {			
    			Statement stmt =c.createStatement();
    			stmt.execute(rqt);
     
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}finally{
    			Connexion.closeCnx(c);
    		}
    	}
    Le problème venait du fait que la connection ouverte dans insertUser semblait se fermé dans getNbUser.

  4. #4
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut
    humm as tu compris d'ouvenait l'erreur...

  5. #5
    Membre éclairé
    Profil pro
    Responsable test de charge
    Inscrit en
    Février 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable test de charge

    Informations forums :
    Inscription : Février 2006
    Messages : 186
    Par défaut
    Je pense que cela est du au fait que je ferme la connexion dans tout les cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    finally
    {
    	Connexion.closeCnx(conn);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public static void closeCnx(Connection c)
    {
    	cnx=c;
    	if(!isClosed())
    		try {
    			cnx.close();
    		} 
                    catch (SQLException e) 
                   {
    		        e.printStackTrace();
    		}
    	}
    }
    Et que cette connexion contient un éléments statique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	private static Connection cnx;

    Tu confirmes F2S ?

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/05/2011, 14h51
  2. Clic droit - insérer en base?
    Par ben53 dans le forum Outlook
    Réponses: 1
    Dernier message: 12/04/2007, 13h32
  3. insérer des élément dans une base de donné
    Par wiss20000 dans le forum JDBC
    Réponses: 5
    Dernier message: 01/03/2007, 14h49
  4. Réponses: 4
    Dernier message: 14/06/2006, 17h22
  5. tranférer des éléments d'une base
    Par john_wayne dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 21/06/2004, 15h33

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