Insertion base de données MySQL avec java [Résolu]

- - Dernière réponse : cs_Julien39
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 27 févr. 2013 à 16:09
Bonjour,
je veux insérer des données dans ma table MySQL.J'ai écrit le code suivant mais ça marche pas:
package com.controle.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class connectio {
public static void main(String[] args) throws Exception {
String url = "com.mysql.jdbc.Driver";
Connection con = null ;
try {

System.out.println("Connection au driver JDBC");
//moyPaiement=txtmoy.getSelectedText();
Class.forName(url);
System.out.println("Chargement du pilote Mysql réussi");

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/controle_indiciaire","marouen","97480934");
//insertion
String str = "insert into controleindiciaire(id,N°Comptes,Debit,Credit) VALUES (?,?,?,?)";
PreparedStatement stmt = con.prepareStatement(str);
stmt.setInt(1,1);
stmt.setInt(2,987456);
stmt.setDouble(3,152.05);
stmt.setDouble(4,152.05);
stmt.executeUpdate(str);
con.commit();
System.out.println("ligne insérée");
con.close();
//System.out.println(str+" ligne insérée");
}
catch(ClassNotFoundException cnfe){
System.out.println("Driver introuvable : ");
cnfe.printStackTrace();
}
catch(SQLException sqle){
System.out.println("Erreur SQL : ");
//Cf. Comment gérer les erreurs ?
}
catch(Exception e){
System.out.println("Autre erreur : ");
e.printStackTrace();
}
finally
{
if(con!=null){try{con.close();}catch(Exception e){e.printStackTrace();}}
//etc.
}}}
la console affiche
Connection au driver JDBC
Chargement du pilote Mysql réussi
Erreur SQL :
merci de m'aider.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
73
Date d'inscription
mardi 27 mai 2008
Dernière intervention
31 mai 2013
3
Merci
mon ami, si la réponse te satisfais, veuillez cliquer sur le bouton réponse acceptée...
merci.

Un orateur trop long est comme une horloge qui sonne les minutes!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de alvinemambele
Messages postés
73
Date d'inscription
mardi 27 mai 2008
Dernière intervention
31 mai 2013
1
Merci
je m'excuse, voici le deux partie du code qui t’intéresse

private class SauverEnBase{
        String myUrl="";
        String myUser = "";
        String myPwd ="";
        String Data="";
        private Connection cn=null;
        //Statement st=null;
        private java.sql.Statement st = null;

        private SauverEnBase(String url, String user, String password){
            this.myUrl=url;
            this.myUser=user;
            this.myPwd=password;
        }
        
        private Boolean Connect(){
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                this.cn = DriverManager.getConnection("jdbc:mysql:"+this.myUrl, this.myUser, this.myPwd);
                this.st = this.cn.createStatement();
                return true;
            } catch (SQLException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            }
            //Class.forName("com.mysql.jdbc.Driver").newInstance();
            return false;
        }
        
        private ResultSet Execut (String SqlString){
            try {
                ResultSet rs = this.st.executeQuery(SqlString);
                return rs;
            } catch (SQLException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            }
            return null;
        }
        
        private int myUpdate (String SqlString){
            try {
                int rs = this.st.executeUpdate(SqlString);
                return rs;
            } catch (SQLException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            }
            return 0;
        }
        
        private void Close(){
            try {
                this.st.close();
                this.cn.close();
            } catch (SQLException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
    }


cette partie vous permet d'appeler la classe et faire votre insertion

SauverEnBase mysqlCli = new SauverEnBase("//localhost/psbase", "root", "");
            if (mysqlCli.Connect()) {
               int rs = mysqlCli.myUpdate("INSERT INTO devises (Libelle_Devise, Pays_Devise, Taux_Tevise) VALUE ('USD', 'USA', 919)");
            } else {
                System.out.println("Mysql connection failed !!!");
            }
        mysqlCli.Close();


Un orateur trop long est comme une horloge qui sonne les minutes!
Commenter la réponse de alvinemambele
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
0
Merci
Salut,

Il est plus intéressant d'avoir la trace de l'erreur plutot qu'un message que tu affiches, donc remplaces :
catch(SQLException sqle){ 
   System.out.println("Erreur SQL : "); 
   //Cf. Comment gérer les erreurs ? 
}

par

catch(SQLException sqle){ 
   sqle.printStackTrace(); 
}


Et là, on verra ce qui pose problème.
Commenter la réponse de cs_Julien39
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
0
Merci
Tant que tu y es, enlèves les catch de classnotfoundexception et mets un printSatckTrace sur toutes les exceptions que tu catches, ce sera plus propre.
Commenter la réponse de cs_Julien39
Messages postés
73
Date d'inscription
mardi 27 mai 2008
Dernière intervention
31 mai 2013
0
Merci
voici ma classe qui va t permettre de bien faire l'action voulu
essayer de remplacer là où ça te concerne et ça va marcher...

private class SauverEnBase{
        String myUrl="";
        String myUser = "";
        String myPwd ="";
        String Data="";
        private Connection cn=null;
        //Statement st=null;
        private java.sql.Statement st = null;

        private SauverEnBase(String url, String user, String password){
            this.myUrl=url;
            this.myUser=user;
            this.myPwd=password;
        }
        
        private Boolean Connect(){
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                this.cn = DriverManager.getConnection("jdbc:mysql:"+this.myUrl, this.myUser, this.myPwd);
                this.st = this.cn.createStatement();
                return true;
            } catch (SQLException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            }
            //Class.forName("com.mysql.jdbc.Driver").newInstance();
            return false;
        }
        
        private ResultSet Execut (String SqlString){
            try {
                ResultSet rs = this.st.executeQuery(SqlString);
                return rs;
            } catch (SQLException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            }
            return null;
        }
        
        private int myUpdate (String SqlString){
            try {
                int rs = this.st.executeUpdate(SqlString);
                return rs;
            } catch (SQLException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            }
            return 0;
        }
        
        private void Close(){
            try {
                this.st.close();
                this.cn.close();
            } catch (SQLException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
    }



Un orateur trop long est comme une horloge qui sonne les minutes!
Commenter la réponse de alvinemambele
0
Merci
Merci pour votre aide . Problème résolu.
Commenter la réponse de bakloutimarou
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
0
Merci
Bonjour,

J'interviens peut être un peu tard mais il y a pas mal de maladresses dans ton code alvinemambele, en particulier sur la signature des méthodes : return 0 ou return null, ce n'est pas terrible, il est préférable dans ce cas, d'utiliser des void.

Plutôt que Boolean, utilises le type primitif boolean

L'initialisation ="" systématique ne sert pas à grand chose sauf à encombrer la JVM

Réimplémenter update en myUpdate, ce n'est pas terrible, surtout que le code retour est systématiquement 0

Attention au catch des RuntimeException comme classnotfound

Les conventions d'écriture en java ne sont pas respectées.

Après, ce sont uniquement des maladresses donc le résultat est ok et si bakloutimarou a corrigé, tout va bien.
Commenter la réponse de cs_Julien39

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.