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 :

Importer les données dans une collection


Sujet :

JDBC Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Réunion

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Importer les données dans une collection
    Bonjour à tous

    Je tiens à préciser que je débute dans l'apprentissage de JDBC, et de Java en général

    Je souhaite faire une collection "ListePersonne" dans laquelle je vais enregistrer le nom, le prénom et l'age de chaque personne depuis ma table "Personne" de base de donnée

    Voici ce que j'ai fait:

    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
     
                       ArrayList<Personne> ListePersonne = new ArrayList<Personne>();
    		   String sql= "SELECT id, nom, prenom, age FROM Personne";
    		   ResultSet rs = stmt.executeQuery(sql);
     
     
    		   while(rs.next()){
     
     
    			   int id = rs.getInt("id");
    			   String nom = rs.getString("nom");
    			   String prenom = rs.getString("prenom");
    			   int age = rs.getInt("age");
     
     
    			   Personne p1 = new Personne(id,nom,prenom,age);
    			   p1.afficher();
    			   ListePersonne.add(p1);
    			   }
    Le probleme c'est que les données de toutes les personnes sont stockés dans l'objet p1, alors que je souhaite faire pour chaque personne, un objet qui lui est propre ( p1, p2, p3, p4...)



    Je souhaite également creer une nouvelle personne depuis un nouvel objet personne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
                       Personne p4 = new Personne(4 ,"Legros", "Claude", 58);
    		   int id = p4.getid();
    		   String nom = p4.getNom();
    		   String prenom = p4.getPrenom();
    		   int age = p4.getAge();
     
    		   String sql2 = "INSERT INTO Personne (id,non,prenom,age) VALUES ("+id+","+nom+","+prenom+","+age+")";
    		   stmt.executeUpdate(sql2);
    		   System.out.println("colonne créée...");
    Mais j'obtiens cet erreur: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'Legros' in 'field list'

    comment puis je procéder?

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Le probleme c'est que les données de toutes les personnes sont stockés dans l'objet p1, alors que je souhaite faire pour chaque personne, un objet qui lui est propre ( p1, p2, p3, p4...)
    Cette phrase n'a pas vraiment de sens.

    Le nom que tu vas donner à une variable n'a absolument aucun impact sur la façon de t'en servir et n'est au final pas vraiment représentative de ce qu'est réellement cette variable. Tu peux très bien donner un nom à une variable, et changer ce nom lorsque tu passes cette variable en paramètre à une fonction par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String s1 = "toto";
    afficher( s1 );
     
    public void afficher( String maString ){
     System.out.println( maString );
    }
    Dans un cas elle s'appelle s1 et dans la fonction elle s'appelle maString. Pourtant c'est bel et bien la même variable. Et à partir du moment où tu vas stocker une variable dans une liste (ou tout autre structure), cette notion de nom n'a plus de sens.

    De plus il faut bien comprendre que chaque variable à un cycle de vie. Ce cycle de vie définie à quel moment la variable existe et à quel moment elle n'existe plus. Il en existe plusieurs.

    - Pour une variable de classe, cette durée de vie est égale à la durée de vie de l'objet en question.
    - Pour une variable de méthode elle existe durant le temps où cette méthode s’exécute.

    Toute fois dans ton cas, la variable est contenue au seins d'une boucle. Donc sa durée de vie est égale à une et une seule itération de cet boucle (à partir du moment où tu l'instancies évidemment). Donc même si elle à le même nom, ce n'est pas la même variable. C'est pour ça que cela n'a pas vraiment de sens de vouloir avoir chaque objet dans une variable avec un nom distinct.

    D'autant plus que tu stockes cette variable dans une liste (qui est justement fait pour ça). Après si tu nous expliques un peu plus pourquoi tu tiens tellement à avoir toutes ces variables, je pourrais peut être modifier un peu ma réponse.

    Cette remarque est vrai pour les boucle ou les structure conditionnelle.

    En fait à partir du moment ou tu fais new MonObjet(), ce n'est plus la même variable.

    Mais j'obtiens cet erreur: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'Legros' in 'field list'
    Quand tu insères des valeur dans une base de donnée, tu doit tenir compte du type de cette donnée. Une String doit être entourée de quotte par exemple. C'est ce qui provoque ton erreur MySQLSyntaxErrorException.

    Pour éviter de réfléchir à comment est-ce que tu dois présenter une donnée à la base, il existe les PreparedStatement qui sont (entre autre) fait pour ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PreparedStatement pstmt = con.prepareStatement( "INSERT INTO Personne (id,non,prenom,age) VALUES (?,?,?,?) ");
    pstmt.setInt(1,id);
    pstmt.setString(2,nom);
    pstmt.setString(3,prenom);
    pstmt.setInt(4,age);
     
    pstmt.executeUpdate();
    Petit remarque (mais pas des moindres), c'est une très mauvaise pratique de vouloir gérer tes IDs à la main. Surtout si cette donnée représente ta clé primaire car tu as toutes les chances te vouloir insérer une valeur qui existe déjà.
    Pour ce genre de chose on utilise une valeur en auto_increment ou des triggers pour calculer la valeurs automatiquement.

    Cdt.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Réunion

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Dans ce cas, je n'ai pas bien compris le principe d'une collection..

    En fait je souhaite organiser mon travail de cette façon:

    Liste Personne [
    Personne 1 [ id, nom, prenom, age ]
    Personne 2 [ id, nom, prenom, age ]
    ...]

    Par exemple, comment je peux faire afficher uniquement les données de la personne 2 dans cette situation ?

  4. #4
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Les objets que tu vas stocker dans une collection n'on pas de "nom" à proprement parlé. Tu sais simplement que tu as X éléments de type Personne dans ta liste.

    Si tu veux vraiment garder un ordre dans les valeurs que tu insères, tu peux toujours utiliser une LinkedList (même si par défaut la plupart des listes garde cet ordre).

    De là tu peux accéder à n'importe quelle valeur avec list.get( i ), sachant que tu dois commencer à compter à partir de zéro (donc list.get(1) retourne le 2ème élément).

    La vrai question c'est pourquoi est-ce que tu veux pouvoir afficher le 2eme élément en particulier ?

    Dans 99,99% des cas, il faut partir du principe que tu ne sait pas comment les collections sont organisées. Et puis dans un cas concret tu vas chercher à afficher les infos relative à la personne dont l'ID vaut 1 ou bien la personne qui s'appelle Michel. Ou encore tu vas lister totues les personnes puis les trier par ordre alphabétique. Mais jamais tu n'auras à afficher les données de la 2ème personne, ça n'a pas vraiment de sens fonctionnel.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Réunion

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    D'accord, merci pour ces informations, c'est un peu plus clair.

    Quant à l'erreur de syntaxe je n'ai plus d'erreur grâce aux PreparedStatements.

    Je marque la discussion comme "Résolue", bonne soirée!

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 02/02/2010, 12h02
  2. Importer les données d'une table dans une autre
    Par Jinkas dans le forum PL/SQL
    Réponses: 52
    Dernier message: 22/09/2009, 16h24
  3. importer les données dans une table depuis un fichier
    Par bennkabazz dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 23/12/2008, 11h34
  4. Importer les données d'une table dans un MSFLEXGRID
    Par overdoze dans le forum Access
    Réponses: 1
    Dernier message: 27/08/2007, 17h10

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