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 :

Insert dans ma BD


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
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut Insert dans ma BD
    Bonjour

    J'ai une application qui pour l'instant ne fait que lire le contenu de ma BD. Je compte faire des insert pour ma base par mon application. Je me demandé quel était le moyen le plus propre pour refaire des instructions sql ?

    Est ce que je suis obligé de refaire toutes la structures d'une connexion JDBC ? N'y a t'il pa un autre moyen ?

    Voici mon code du JDBC qui est dans une methode, j'aimerais donc eviter de refaire cette methode pour toutes les structures que je vais devoir faire:

    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
    public void listPersonne() {
            String driver = "com.mysql.jdbc.Driver";
            Connection con = null;
            String url = "jdbc:mysql://localhost/osteo";
            String login = "root";
            String password = "mysql";
     
            try {
                Class.forName(driver);
                con = DriverManager.getConnection(url,login,password);
                Statement stmt = con.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT * FROM personne");
                while (rs.next()){
                    addPersonne(new PersonneBean(rs));
                }
                if (rs != null) rs.close();
            }
            catch(ClassNotFoundException cnfe){
                System.out.println("Driver introuvable : ");
                cnfe.printStackTrace();
            }
            catch(SQLException sqle){
                System.out.println("Erreur SQL : ");
            }
            catch(Exception e){
                System.out.println("Autre erreur : ");
                e.printStackTrace();
            }
            finally {
                try {
                    if (con != null) con.close();
                } catch (SQLException ex) {
                    Logger.getLogger(LogController.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    Merci pour votre aide

  2. #2
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Citation Envoyé par raimus88 Voir le message
    Bonjour

    J'ai une application qui pour l'instant ne fait que lire le contenu de ma BD. Je compte faire des insert pour ma base par mon application. Je me demandé quel était le moyen le plus propre pour refaire des instructions sql ?

    Est ce que je suis obligé de refaire toutes la structures d'une connexion JDBC ? N'y a t'il pa un autre moyen ?

    Voici mon code du JDBC qui est dans une methode, j'aimerais donc eviter de refaire cette methode pour toutes les structures que je vais devoir faire:

    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
    public void listPersonne() {
            String driver = "com.mysql.jdbc.Driver";
            Connection con = null;
            String url = "jdbc:mysql://localhost/osteo";
            String login = "root";
            String password = "mysql";
     
            try {
                Class.forName(driver);
                con = DriverManager.getConnection(url,login,password);
                Statement stmt = con.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT * FROM personne");
                while (rs.next()){
                    addPersonne(new PersonneBean(rs));
                }
                if (rs != null) rs.close();
            }
            catch(ClassNotFoundException cnfe){
                System.out.println("Driver introuvable : ");
                cnfe.printStackTrace();
            }
            catch(SQLException sqle){
                System.out.println("Erreur SQL : ");
            }
            catch(Exception e){
                System.out.println("Autre erreur : ");
                e.printStackTrace();
            }
            finally {
                try {
                    if (con != null) con.close();
                } catch (SQLException ex) {
                    Logger.getLogger(LogController.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    Merci pour votre aide
    Ben l'autre methode c'est de créer un objet dédié à la connexion à la base de donnée et de l'utiliser comme par exemple:
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    import java.io.BufferedInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
     
    /**
     * Classe de connection a la base de donnee Mysql
     *
     */
    public class ConnectBDD {
     
    	private Properties 	parametre=null;
    	private String 		pilote=null;
    	private String 		hote=null;
    	private String 		base=null;
    	private String 		utilisateur=null;
    	private String 		mdp=null;
    	private Connection 	connex=null;
    	private Statement 	stmt=null;
     
    	/**
             * Constructeur par defaut
             */
    	public ConnectBDD(){
    		try{
    			//Chargement des parametres
    			parametre=this.lirePara("para.pro");
    			pilote=parametre.getProperty("pilote");
    			hote=parametre.getProperty("hote");
    			base=parametre.getProperty("base");
    			utilisateur=parametre.getProperty("utilisateur");
    			mdp=parametre.getProperty("mdp");
    			//Création de la connexion
    			Class.forName(pilote).newInstance();
    			connex=DriverManager.getConnection("jdbc:mysql://"+hote+"/"+base,utilisateur,mdp);
    			stmt= connex.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
    		} catch (SQLException sqle) {
    			sqle.printStackTrace();
    		} catch (InstantiationException ie) {
    			ie.printStackTrace();
    		} catch (IllegalAccessException iae) {
    			iae.printStackTrace();
    		} catch (ClassNotFoundException cnfe) {
    			cnfe.printStackTrace();
    		}
    	}
    	/**
             * Fonction de lecture du fichier de paramètrage
             * @param fichier Le fichier de paramètrage
             * @return pr_para Les proprietes de connection
             */
    	public Properties lirePara(String fichier){
    		Properties			pr_para=null;
    		BufferedInputStream	fis_para=null;
     
    		pr_para=new Properties();
    		try{
    			fis_para=new BufferedInputStream(getClass().getResourceAsStream(fichier));
    			pr_para.load(fis_para);
    			fis_para.close();
    		}catch(FileNotFoundException fnfe){
    			System.out.println("Fichier de parametrage introuvable\n"+fnfe);
    		}catch(IOException ioe){
    			System.out.println("Fichier de parametrage illisible\n"+ioe);
    		}
    		return pr_para;
    	}
    	/**
             * Fonction pour execute une requete SELECT sur la base de donnees
             * @param query la requete SQL a executer
             * @return resultat le ResultSet des donnees sur select
             */
    	public ResultSet exeSelect(String query) {
    		ResultSet resultat=null;
     
    		try {
    			resultat=stmt.executeQuery(query);
    		} catch (SQLException sqle) {
    			sqle.printStackTrace();
    		}
    		return resultat;
    	}
    	/**
             * Fonction pour l'execution de modification sur la BDD
             * @param query La requete SQL à executer
             */
    	public void exeUpdate(String query) {
    		try{
    			stmt.executeUpdate(query);
    		} catch(SQLException sqle){
    			sqle.printStackTrace();
    		}
    	}
    }
    Bon là je me sert d'un fichier "properties" pour récupérer les paramètres de connection mais bon le principe reste le même.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    J'ai essayé de fai_re fonctionner tout d'abord simplement un INSERT mais sans succé. Est ce que quelqu'un verrait il l'erreur svp :

    Voici ma methode que j'appelle ds mon constructeur:

    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
    public void AjoutPersonne() {
            PersonneBean pers = new PersonneBean();
            String driver = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://localhost/osteo";
            String login = "root";
            String password = "mysql";
            String requete = "";
            try {
                Class.forName(driver);
                con = DriverManager.getConnection(url,login,password);
                stmt = con.createStatement();
                requete = "INSERT INTO personne(id,nom,prenom,naissance,adresse,profession,mobile,telephone,email,dateConsult) VALUE('6',amo','fri','','','','','','','','','','','','','')";
                int nbMaj = stmt.executeUpdate(requete);
                System.out.println("nb mise a jour = "+nbMaj);
            }
            catch(ClassNotFoundException cnfe){
                System.out.println("Driver introuvable : ");
                cnfe.printStackTrace();
            }
            catch(SQLException sqle){
                System.out.println("Erreur SQL : La BD n'est pas démarré");
            }
            catch(Exception e){
                System.out.println("Autre erreur : ");
                e.printStackTrace();
            }
        }
    J'obtiens comme erreur une SQLException. Pourtant lorsque je regarde ds ma BD la bonne requête, elle partiquement pareil:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `osteo`.`personne` (`id`, `nom`, `prenom`, `naissance`, `adresse`, `profession`, `mobile`, `telephone`, `email`, `dateConsult`, `remarques`, `motif`, `antecedants`, `operations`, `traitement`, `examens`) VALUES ('6', 'Goodall', 'Lee', '', '', '', '', '', '', '', '', '', '', '', '', '');
    Merci de votre aide

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    Je vois plusieurs choses dans ta requête d'insertion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "INSERT INTO personne(id,nom,prenom,naissance,adresse,profession,mobile,telephone,email,dateConsult) VALUE('6',amo','fri','','','','','','','','','','','','','')";
    D'abord pour la colonne id tu as la valeur '6'.Vérifie si la contient id prends des chaines de caractère. D'habitude, la colonne id est de type numeric(int par exemple).
    2e chose je vois amo' pour la 2eme valeur. Il manquerait pas un simple quote devant. Il doit être sous cette forme 'amo'
    3eme chose tu as donné 10 colonnes (id,nom,prenom,naissance,...) et 16 valeurs. Et ça ca marche pas. Il faut que le nombre de valeurs soit égal au nombre de colonnes.
    Sinon si l'erreur persiste imprime la trace dans le bloc SQLException et poste le ici.

    Bon courage!!

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Merci pour ton aide, je m'en suis aperçu apres qu'il y avait beaucoup de choses qui n'allait pas.


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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/06/2004, 12h47
  2. Insertion dans fichier texte + rapide que TStringList ?
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 26/02/2004, 11h34
  3. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34
  4. Insertion dans un fichier xml à partir d'un xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/03/2003, 09h45
  5. Insertion dans un fichier XML
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/02/2003, 17h16

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