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 :

Requete SQL en JAVA


Sujet :

JDBC Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    Points : 30
    Points
    30
    Par défaut Requete SQL en JAVA
    Bonjour tout le monde

    je rencontre un problème de requete sql en java depuis presque deux semaine et je n'arrive vraiment pas à y trouver de solution.

    j'ai deux classe chacune doit mette à jour une table dans ma base de données dans la première classe j'ai le code suivant qui fonctionne bien



    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
    	     	Save.addActionListener(new ActionListener() {
               	 public void actionPerformed(ActionEvent e) {
               	 // Cette méthode ne sera appelée que pour les évènements sur le bouton monBouton.
     
               		        // chaine de connexion
               				final String url = "jdbc:mysql://localhost:3306/rescue"; 
               		     	Connection con = null; 
               		     	Statement requete = null;
               		     	ResultSet resultat1 = null;
     
                   		    String val1 = (String) Mpay.getSelectedItem();
                   		    String val2 = (String) Stat.getSelectedItem();
     
     
                				try {
               		     		Class.forName("com.mysql.jdbc.Driver").newInstance();
               		     	    con = DriverManager.getConnection(url,"root","amine");
     
               		     		// création de la rquête
               		     		requete = con.createStatement();
               		     		// exécution de la requête
     
     
     
     
     
               		     			// récupération des identifiants de connexion
     
     
     int	resultat = requete.executeUpdate("update Interventionexter set DATE_INTEREXT='"+Dateexter.getText()+"', DATE_FACTURATION='"+Dfacture.getText()+"', PROBLEMATIQUE='"+Pb.getText()+"', DESCRIPTION='"+Descrip.getText()+"', COUT='"+Ct.getText()+"', MODE_PAIEMENT='"+val1+"', EXTSTATUT='"+val2+"'   where N_INTEREXT  = "+Interventionexter.Nvenexter+"");
      JOptionPane.showMessageDialog(null,"Votre intervention a été bien modifiée" );
     
     
     
               		     				// Labeltest.setText(Numclient+ Nomclient + Ntelclient);
     
               		     				Fclient Fclient = new Fclient();
               		     				Fclient.setVisible(true);
               		    		     	dispose();
     
     
     
     
     
     
                				} catch (ClassNotFoundException e1) {
               		     		// TODO Auto-generated catch block
               		     		e1.printStackTrace();
               		     	} catch (SQLException e2) {
                					// TODO Auto-generated catch block
                					e2.printStackTrace();
                				} catch (Exception e3) {
                					e3.printStackTrace();
                				}
     
                				finally { 
               					try {con.close();
               					   requete.close();
               					   resultat1.close();
               					} 
               					catch(final SQLException e1) {e1.printStackTrace();} 
               				} 
     
               			}
     
               		});
    dans la deuxième classe dont j'ai le gros problème j'ai le code suivant:



    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
    Save.addActionListener(new ActionListener() {
               	 public void actionPerformed(ActionEvent e) {
     
               				final String url = "jdbc:mysql://localhost:3306/rescue"; 
               		     	Connection con = null; 
               		     	Statement requete = null;
     
               		    String val1 = (String) Mpay.getSelectedItem();
               		    String val2 = (String) Stat.getSelectedItem();
     
     
                				try {
               		     		Class.forName("com.mysql.jdbc.Driver").newInstance();
               		     	    con = DriverManager.getConnection(url,"root","amine");
     
    requete = con.createStatement();
     
     int	resultat = requete.executeUpdate("update Interventioninter set DATE_ENTREE='"+Denter.getText()+"', DATE_INTERINT='"+Dateinter.getText()+"', DATE_FACTURATION='"+Dfacture.getText()+"', DATE_SORTIE= '"+Dsortie.getText()+"', PROBLEMATIQUE='"+Pb.getText()+"', DESCRIPTION='"+Descrip.getText()+"', COUT='"+Ct.getText()+"', MODE_PAIEMENT= '"+val1+"', INTSTATUT= '"+val2+"' where N_INTERINT="+Interventioninter.Nveninter+"");
     
                               JOptionPane.showMessageDialog(null,"Votre intervention a été bien modifiée" );
     
              		Fclient Fclient = new Fclient();
     
               		     Fclient.setVisible(true);
               		    dispose();
    et je recupére l'erreur suivant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ALIMENTATION', COUT='70.00', MODE_PAIEMENT= 'Espèce', INTSTATUT= 'En cours' wher' at line 1
    alors quand je mets preparedStatement au lieu de Statment je recupére bien un message comme quoi les datas sont bien modifiées mais quand je vérifie dans la base de données je trouve que aucune modification n'a été faite

    bon je recupère quand meme un message en bas d'eclipse

    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
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at Finterventionintermodify$1.actionPerformed(Finterventionintermodify.java:274)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)

    merci de me repondre le plus vite possible

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    -> Utiliser les preparedStatement, ça c'est certain, sinon ca pue la cata à la première apostrophe
    -> ne pas oublie comme toujours en SQL, le commit quand tu as fini:

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    salut

    voila ce que j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PreparedStatement prep = (PreparedStatement) con.prepareStatement("update Interventioninter set DATE_ENTREE='"+Denter.getText()+"', DATE_INTERINT='"+Dateinter.getText()+"', DATE_FACTURATION='"+Dfacture.getText()+"', DATE_SORTIE= '"+Dsortie.getText()+"', PROBLEMATIQUE='"+Pb.getText()+"', DESCRIPTION='"+Descrip.getText()+"', COUT='"+Ct.getText()+"', MODE_PAIEMENT= '"+val1+"', INTSTATUT= '"+val2+"' where N_INTERINT="+Interventioninter.Nveninter+"");
     
                                 con.commit();
    mais ça resout pas le problème au contraire j'ai plus le message ("Votre intervention a été bien modifiée") et au niveau d'eclipse j'ai le message d'erreur suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.sql.SQLException: Can't call commit when autocommit=true
    merci de me repondre

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    1) ce n'est pas comme ça qu'on utilise un prepared statement, ça ou faire la requete directement c'est la même chose. Voir la FAQ: http://java.developpez.com/faq/jdbc/...paredStatement

    2) un prepared statement, c'est comme un statement, ça s'exécute. Tu l'exécute pas, la commande ne sera pas envoyée au serveur. Voir la FAQ aussi http://java.developpez.com/faq/jdbc/...utionStatement
    3) retirer l'autocommit de la connection ou ne pas faire appel à commit. FAQ a nouveau http://java.developpez.com/faq/jdbc/...defTransaction

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Avant d'accuser java, regarde comme l'a dit l'exception si t'a requete est correcte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    requete = con.createStatement();
      String sql= "update Interventioninter set DATE_ENTREE='"+Denter.getText()+"', DATE_INTERINT='"+Dateinter.getText()+"', DATE_FACTURATION='"+Dfacture.getText()+"', DATE_SORTIE= '"+Dsortie.getText()+"', PROBLEMATIQUE='"+Pb.getText()+"', DESCRIPTION='"+Descrip.getText()+"', COUT='"+Ct.getText()+"', MODE_PAIEMENT= '"+val1+"', INTSTATUT= '"+val2+"' where N_INTERINT="+Interventioninter.Nveninter ;
    System.out.println(sql);		    	
     int	resultat = requete.executeUpdate(sql);
    if(resultat>0)
     JOptionPane.showMessageDialog(null,"Votre intervention a été bien modifiée" );
    Tu peux alors copier la requete dans la console et l'examiner. A l'occasion tu peux même l'executer dans mysql.
    Il peut s'agir d'un nom de colonne mal écrit.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par darrylsite Voir le message
    Tu peux alors copier la requete dans la console et l'examiner. A l'occasion tu peux même l'executer dans mysql.
    Il peut s'agir d'un nom de colonne mal écrit.
    ou à 99.9% d'une apostrophe dans un des textes!

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Salut

    darrylsite j'ai testé ton code ça marche mais si ça te dérange pas j'ai quelques questions à te poser parce que j'ai cru que je suis capable de faire des requetes sql en java mais apparemment c'est pas le cas.

    bon pour moi
    pour récupérer un String je met le champ.getText() avec des + dans les deux cotés entre des guillemets et apostrophes ex pour récupérer un entier je met le champ.getText() avec des + dans les deux cotés entre des guillemets ex et ça marchait bien regarde cet exemple qui fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int	resultat = requete.executeUpdate("update Client set NOM='"+Nomc.getText()+"', PRENOM='"+Prec.getText()+"', ADRESSE='"+Adress.getText()+"', N_TELFIXE= '"+Ntel.getText()+"', N_TELMOBILE= '"+Ntelm.getText()+"', EMAIL='"+Email.getText()+"' where N_CLIENT="+Nclient.getText()+"");
    alors toi pour un entier tas mis juste un seul + sans guillemets ex de ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where N_INTERINT="+Interventioninter.Nveninter
    une autre question à quoi sert cette commande dans le code que t'as fait ??


    pour finir je fais une requete d'insertion alors je me suis servi de ton code mais ça marche pas merci de me le corriger


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    requete = con.createStatement();
       		     	  String sql= "insert into Interventioninter (DATE_ENTREE, DATE_INTERINT, DATE_FACTURATION, DATE_SORTIE, PROBLEMATIQUE, DESCRIPTION, COUT, MODE_PAIEMENT, INTSTATUT, N_CLIENT) values ('"+Denter.getText()+"', '"+Dateinter.getText()+"', '"+Dfacture.getText()+"', '"+Dsortie.getText()+"', '"+Pb.getText()+"', '"+Descrip.getText()+"', '"+Ct.getText()+"', '"+val1+"', '"+val2+"', '"+Rclient.Nmclient+"') where N_CLIENT="+Rclient.Nmclient;	
       		     	  int	resultat = requete.executeUpdate(sql);
       		     	 if(resultat>0)
       		     	 JOptionPane.showMessageDialog(null,"Intervention créée avec succes" );
    Ps: merci de me passer un tutorat sur les requet SQL en java et désolé pour toutes les demandes que j'ai faites mais je compte sur ta générosité

    tchize: j'ai pris tes conseils en considération merci à toi aussi

  8. #8
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    Salut,

    Les requêtes préparées te permettent de justement ne pas t'emmêler les pinceaux avec ces '"+ champs.getText() + "' ....

    Tu dois les utiliser comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PreparedStatement statement = cn.prepareStatement("select cli_id from owner.client where cli_name = (?) ");
    statement.setString(1,clientName.getText());
     
    ResultSet rs=(ResultSet)statement.executeQuery();
    Par exemple..

    une autre question à quoi sert cette commande dans le code que t'as fait ??
    Code :
    if(resultat>0)
    Lorsque tu fais ton executeUpdate, celui-ci te renvoit le nombre de lignes affectées.
    Si il n'est pas > 0 , cela signifie qu'aucune ligne n'a été modifiée.. tu peux donc gérer ceci.

  9. #9
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par patriot Voir le message
    alors toi pour un entier tas mis juste un seul + sans guillemets ex de ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where N_INTERINT="+Interventioninter.Nveninter
    Le code est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String s= "where N_INTERINT="+Integer.toString(Interventioninter.Nveninter);
    Donc ajouter une chaine vide à une chaine ne change rien à la chaine initiale.

    pour finir je fais une requete d'insertion alors je me suis servi de ton code mais ça marche pas merci de me le corriger


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    requete = con.createStatement();
       		     	  String sql= "insert into Interventioninter (DATE_ENTREE, DATE_INTERINT, DATE_FACTURATION, DATE_SORTIE, PROBLEMATIQUE, DESCRIPTION, COUT, MODE_PAIEMENT, INTSTATUT, N_CLIENT) values ('"+Denter.getText()+"', '"+Dateinter.getText()+"', '"+Dfacture.getText()+"', '"+Dsortie.getText()+"', '"+Pb.getText()+"', '"+Descrip.getText()+"', '"+Ct.getText()+"', '"+val1+"', '"+val2+"', '"+Rclient.Nmclient+"') where N_CLIENT="+Rclient.Nmclient;	
       		     	  int	resultat = requete.executeUpdate(sql);
       		     	 if(resultat>0)
       		     	 JOptionPane.showMessageDialog(null,"Intervention créée avec succes" );
    Il faudra revoir la structure de ta table pour savoir le type de la colonne N_CLIENT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     '"+Rclient.Nmclient+"') where N_CLIENT="+Rclient.Nmclient;
    tu l'utilise d'un coté comme varchar, d'un autre comme un nombre.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Salut

    voila la structure de la table


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE Interventioninter (N_INTERINT  INT(5)  AUTO_INCREMENT  PRIMARY KEY, DATE_ENTREE DATE, DATE_INTERINT DATE, DATE_FACTURATION DATE, DATE_SORTIE DATE, PROBLEMATIQUE VARCHAR(40), DESCRIPTION LONGTEXT, COUT DECIMAL(6,2), MODE_PAIEMENT VARCHAR(20), INTSTATUT VARCHAR(20), N_CLIENT  INT(5)) ;

    libuma: quand j'utilise le preparedStatement j'ai bien le message que le fichier a été bien crée mais quand je verifie dans la base de le trouve pas c'est pour cela je l'utilise plus c'est possible que je l'utilise mal puisque je suis encore débutant.

    merci d'avance

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par patriot Voir le message

    libuma: quand j'utilise le preparedStatement j'ai bien le message que le fichier a été bien crée mais quand je verifie dans la base de le trouve pas
    montre ton code.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Salut

    voila le code avec preparedStatement

    String val1 = (String) Mpay.getSelectedItem();
    String val2 = (String) Stat.getSelectedItem();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PreparedStatement prep1 = (PreparedStatement) con.prepareStatement("insert into Interventioninter (DATE_ENTREE, DATE_INTERINT, DATE_FACTURATION, DATE_SORTIE, PROBLEMATIQUE, DESCRIPTION, COUT, MODE_PAIEMENT, INTSTATUT) values ('"+Denter.getText()+"', '"+Dateinter.getText()+"', '"+Dfacture.getText()+"', '"+Dsortie.getText()+"', '"+Pb.getText()+"', '"+Descrip.getText()+"', '"+Ct.getText()+"', '"+val1+"', '"+val2+"') where N_CLIENT="+Rclient.Nmclient+"");

    et voila le code de darrylsite qui a resolu le problème de modification


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       		     	requete = con.createStatement();
       		     	  String sql= "insert into Interventioninter (DATE_ENTREE, DATE_INTERINT, DATE_FACTURATION, DATE_SORTIE, PROBLEMATIQUE, DESCRIPTION, COUT, MODE_PAIEMENT, INTSTATUT, N_CLIENT) values ('"+Denter.getText()+"', '"+Dateinter.getText()+"', '"+Dfacture.getText()+"', '"+Dsortie.getText()+"', '"+Pb.getText()+"', '"+Descrip.getText()+"', '"+Ct.getText()+"', '"+val1+"', '"+val2+"', '"+Rclient.Nmclient+"') where N_CLIENT="+Rclient.Nmclient;	
       		     	  int	resultat = requete.executeUpdate(sql);
       		     	 if(resultat>0)
       		     	 JOptionPane.showMessageDialog(null,"Intervention créée avec succes" );

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par patriot Voir le message
    Salut

    voila le code avec preparedStatement

    String val1 = (String) Mpay.getSelectedItem();
    String val2 = (String) Stat.getSelectedItem();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PreparedStatement prep1 = (PreparedStatement) con.prepareStatement("insert into Interventioninter (DATE_ENTREE, DATE_INTERINT, DATE_FACTURATION, DATE_SORTIE, PROBLEMATIQUE, DESCRIPTION, COUT, MODE_PAIEMENT, INTSTATUT) values ('"+Denter.getText()+"', '"+Dateinter.getText()+"', '"+Dfacture.getText()+"', '"+Dsortie.getText()+"', '"+Pb.getText()+"', '"+Descrip.getText()+"', '"+Ct.getText()+"', '"+val1+"', '"+val2+"') where N_CLIENT="+Rclient.Nmclient+"");
    En somme tu n'a RIEN fait de tout ça:

    Citation Envoyé par tchize_ Voir le message
    1) ce n'est pas comme ça qu'on utilise un prepared statement, ça ou faire la requete directement c'est la même chose. Voir la FAQ: http://java.developpez.com/faq/jdbc/...paredStatement

    2) un prepared statement, c'est comme un statement, ça s'exécute. Tu l'exécute pas, la commande ne sera pas envoyée au serveur. Voir la FAQ aussi http://java.developpez.com/faq/jdbc/...utionStatement

  14. #14
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par patriot Voir le message
    Salut

    voila la structure de la table


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE Interventioninter (N_INTERINT  INT(5)  AUTO_INCREMENT  PRIMARY KEY, DATE_ENTREE DATE, DATE_INTERINT DATE, DATE_FACTURATION DATE, DATE_SORTIE DATE, PROBLEMATIQUE VARCHAR(40), DESCRIPTION LONGTEXT, COUT DECIMAL(6,2), MODE_PAIEMENT VARCHAR(20), INTSTATUT VARCHAR(20), N_CLIENT  INT(5)) ;

    libuma: quand j'utilise le preparedStatement j'ai bien le message que le fichier a été bien crée mais quand je verifie dans la base de le trouve pas c'est pour cela je l'utilise plus c'est possible que je l'utilise mal puisque je suis encore débutant.

    merci d'avance
    Salut,
    Je pense que tchize_ à tout dit..
    Regarde l'exemple que je t'ai donné et ton code, ça n'a rien à voir.
    D'abord tu mets des (?) pour signaler que tu vas lui envoyer un parametre..
    Ensuite tu "set" ces paramètres proprement.
    Tu conclus par un ExecuteQuery pour envoyer ta requête au serveur.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Salut

    libuma: la requête que j'ai mise de la création de la base c'était juste au titre d'information sur les types de données répondant à la question de darrylsite sur le type N_CLIENT dans mon code JAVA j'ai pas besoin de créer une table mais j'ai besoin d'insérer des datas dans la table. j'ai pris pris en considération les conseil de Tchize mais juste que j'ai pas réussi à le faire tout seul c'est pour cela je vous ai demandé de me corriger la requête d'insertion.

    Ps: Merci de me corriger le code de la requête et pour les tutos je les ai déja vu merci

  16. #16
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    pour finir je fais une requete d'insertion alors je me suis servi de ton code mais ça marche pas merci de me le corriger


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    requete = con.createStatement();
       		     	  String sql= "insert into Interventioninter (DATE_ENTREE, DATE_INTERINT, DATE_FACTURATION, DATE_SORTIE, PROBLEMATIQUE, DESCRIPTION, COUT, MODE_PAIEMENT, INTSTATUT, N_CLIENT) values ('"+Denter.getText()+"', '"+Dateinter.getText()+"', '"+Dfacture.getText()+"', '"+Dsortie.getText()+"', '"+Pb.getText()+"', '"+Descrip.getText()+"', '"+Ct.getText()+"', '"+val1+"', '"+val2+"', '"+Rclient.Nmclient+"') where N_CLIENT="+Rclient.Nmclient;	
       		     	  int	resultat = requete.executeUpdate(sql);
       		     	 if(resultat>0)
       		     	 JOptionPane.showMessageDialog(null,"Intervention créée avec succes" );
    Comme je l'avais dit, le probleme vient de la colonne N_CLIENT. Dans la requete tu lui affecte un autre type de données (varchar) alorsque c'est un int.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    requete = con.createStatement();
       		     	  String sql= "insert into Interventioninter (DATE_ENTREE, DATE_INTERINT, DATE_FACTURATION, DATE_SORTIE, PROBLEMATIQUE, DESCRIPTION, COUT, MODE_PAIEMENT, INTSTATUT, N_CLIENT) values ('"+Denter.getText()+"', '"+Dateinter.getText()+"', '"+Dfacture.getText()+"', '"+Dsortie.getText()+"', '"+Pb.getText()+"', '"+Descrip.getText()+"', '"+Ct.getText()+"', '"+val1+"', '"+val2+"', "+Rclient.Nmclient+") where N_CLIENT="+Rclient.Nmclient;	
       		     	  int	resultat = requete.executeUpdate(sql);
       		     	 if(resultat>0)
       		     	 JOptionPane.showMessageDialog(null,"Intervention créée avec succes" );

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    salut


    darrylsite merci d'avoir repondu.
    en fait j'ai testé ta requete mais malheureusement ne fonctionne pas, je l'ai testé aussi en ajoutant un + et deux apostrophes mais toujours sans succès,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String sql= "insert into Interventioninter (DATE_ENTREE, DATE_INTERINT, DATE_FACTURATION, DATE_SORTIE, PROBLEMATIQUE, DESCRIPTION, COUT, MODE_PAIEMENT, INTSTATUT, N_CLIENT) values ('"+Denter.getText()+"', '"+Dateinter.getText()+"', '"+Dfacture.getText()+"', '"+Dsortie.getText()+"', '"+Pb.getText()+"', '"+Descrip.getText()+"', '"+Ct.getText()+"', '"+val1+"', '"+val2+"', "+Rclient.Nmclient+") where N_CLIENT="+Rclient.Nmclient+"";
    je commence vraiment à perde l'espoir

    merci d'avance

  18. #18
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    Non, je pense que tu n'as pas saisi ce dont on parle.

    Tu dois procéder comme ceci :
    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
     
    // ta requête préparée
    PreparedStatement statement = cn.prepareStatement("insert into Interventioninter 
    (DATE_ENTREE, DATE_INTERINT, DATE_FACTURATION, DATE_SORTIE, PROBLEMATIQUE, DESCRIPTION, COUT, MODE_PAIEMENT, INTSTATUT,
     N_CLIENT) values (?,?,?,?,?,?,?,?,?,?)");
    // Ici, tu set tes paramètres
    statement.setDate(1,taDate);
    statement.setDate(2,taDate2);
    ...
    statement.setString(5,taProblematique);
    ...
    statement.setInt(10,tonNumClient);
    // Là, tu exécutes ta requête
    int resultat = statement.executeUpdate();
    // Enfin, tu vérifies
     if(resultat>0)
       		     	 JOptionPane.showMessageDialog(null,"Intervention créée avec succes" );
    C'est plus clair, moins sujet aux erreurs d'apostrophes et autres.
    De plus, en créant une méthode qui attend les différents paramètres, tu peux réutiliser ta requête à plusieurs endroits différents indépendamment des noms de champs que tu utilises.

    J'espère que j'ai pu t'aider un peu plus

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Salut

    libuma: pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    statement.setDate(1,taDate);
    statement.setString(5,taProblematique);
    qu'est ce que je dois mettre à la place de tadate et taproblèmatique ??? le champs de saisi de ces varialbes ('"+Denter.getText()+"') ou autre choses.

    une autre question pour la commande suivante statement.setDate(1,taDate); t'as mis 1 alors le 1 dans ma table correspond à N_INTERINT par contre la première date commence à paritr du deuxième champs

    merci d'avance

  20. #20
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par patriot Voir le message
    salut


    darrylsite merci d'avoir repondu.
    en fait j'ai testé ta requete mais malheureusement ne fonctionne pas, je l'ai testé aussi en ajoutant un + et deux apostrophes mais toujours sans succès,
    Le probleme n'est pas de mettre "" à la fin. Tu as encore un autre probleme de type avec COUT qui est defini comme decimal(6,5) et que tu utilise comme varchar en mettant la valeur entre ''.
    Pour t'éviter tout ça tu peux faire comme l'a dit libuma.

    Sinon, tu dois tenir compte de la structure de ta table afin d'eviter d'avoir des probleme de type dans ta requete.

Discussions similaires

  1. Problème Requete SQL en Java
    Par zeratec dans le forum JDBC
    Réponses: 1
    Dernier message: 31/03/2015, 13h38
  2. Réponses: 3
    Dernier message: 28/01/2014, 11h57
  3. Execution requete SQL en JAVA
    Par absot dans le forum Général Java
    Réponses: 7
    Dernier message: 17/02/2010, 22h28
  4. Réponses: 4
    Dernier message: 25/05/2009, 15h44
  5. Connection et requete sql avec java
    Par martos dans le forum NetBeans
    Réponses: 8
    Dernier message: 28/08/2007, 21h57

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