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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    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
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    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
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    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
    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
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    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

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