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

avec Java Discussion :

pb avec createStatement


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Par défaut pb avec createStatement
    Bonjour,

    j'essaie de me connecter à une base MySQL pour récupérer toutes les entrées et les mettre dans un tableau, mais j'ai un problème au niveau de la création de ma requête.
    J'ai deux classes (ConnectionString et AbstractFactory) qui définissent les paramètres de la connexion. les voici:

    Classe ConnectionString
    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
     
     
    package sql;
     
    import java.beans.Statement;
     
    /**
     * @author mve
     */
    public class ConnectionString 
    {
        protected String url;
        protected String user;
        protected String password;
     
        //constructeur
        public ConnectionString(String url,String user,String password)
        {
            this.url=url;
            this.user=user;
            this.password=password;
        }
     
        public void close() {
            throw new UnsupportedOperationException("Not yet implemented");
        }
     
        //méthode qui retourne l'url pour la connexion
        public String getUrl()
        {
            return url;
        }
        //méthode qui retourne le login pour la connexion
        public String getUser()
        {
            return user;
        }
        //méthode qui retourne le mot de passe pour la connexion
        public String getPassword()
        {
            return password;
        }
    }
    et voici la classe AbstractFactory

    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
     
     
    package dataAccessLayer;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.Statement;
    import sql.ConnectionString;
     
    /**
     *
     * @author mve
     */
    public abstract class AbstractFactory 
    {
        protected ConnectionString cnxString;
     
        //constructeur
        public AbstractFactory(ConnectionString  cnxString)
        {
            this.cnxString=cnxString;
        }
     
        protected Connection getConnection()throws Exception 
        {
            Connection con = null;
            //chargement du pilote
            Class.forName("com.mysql.jdbc.Driver");
            //création de la connexion
            con = DriverManager.getConnection(cnxString.getUrl(), cnxString.getUser(),cnxString.getPassword());
            return con;
        }
     
        protected PreparedStatement getPreparedStatement(String sql)throws Exception 
        {
            return getConnection().prepareStatement(sql);
        }
     
     
    }
    Maintenant, je veux donc dréer la requête mais je ne sais plus comment faire: avec cnxString? getConnection()?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     public ArrayList List()
        {
        Statement tab=null;
        ResultSet resultat=null;
        tab=?????.createStatement();
        resultat=tab.executeQuery("SELECT * FROM tblpersonnes");
     
        }
    Une piste?
    Merci

  2. #2
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Ni l'une ni l'autre pour le moment : cnxString contient seulement les données de ta connexion, mais rien pour se connecter à la base. L'autre classe est abstraite : impossible de l'instancier... A mon avis il te manque une classe qui hérite d'AbstractFactory. De plus, où se trouve ta méthode List() ?

    (Pour répondre à ta question, il s'agira de getConnection().createStatement)

  3. #3
    Membre confirmé Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Par défaut
    merci pour la réponse.
    Ma méthode List() doit se trouver dans la classe PersonneFactory que voici:
    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
     
    package dataAccessLayer;
     
    import dataAccessLayer.entities.Personne;
    import java.beans.Statement;
    import java.util.ArrayList;
    import sql.ConnectionString;
    import java.sql.*;
     
     
     
    /**
     * @author mve
     */
    public class PersonneFactory extends AbstractFactory
    {
        //constructeur
        public PersonneFactory(ConnectionString cnxString)
        {
            super(cnxString);
        }
        public void Insert(Personne p)throws Exception
        {
     
            PreparedStatement ps=getPreparedStatement("INSERT INTO TblPersonnes (firstName,Name,Age) VALUES (?,?,?)");
            ps.setString(1, p.getFirstName());
            ps.setString(2, p.getName());
            ps.setInt(3, p.getAge());
            ps.execute();
     
             //Récupère le compteur auto
            ResultSet rs=ps.getGeneratedKeys();//renvoie la clé primaire compteur auto
            if(rs.next())
            {
              p.pkIdPersonne=rs.getInt(1);
            }
     
            ps.getConnection().close();
     
        }
     
     
        public void Delete(Personne p) throws Exception
        {
            PreparedStatement del = getPreparedStatement("DELETE FROM TblPersonnes WHERE PkIdPersonne=?");
            del.setInt(1, p.pkIdPersonne);
            del.execute();
            del.getConnection().close();
     
        }
     
        public void Update(Personne p) throws Exception
        {
            PreparedStatement upt = getPreparedStatement("UPDATE TblPersonnes SET Name=?, Age=? WHERE pkIdPersonne=?");
            upt.setString(1, p.getName());
            upt.setInt(2, p.getAge());
            upt.setInt(3,p.pkIdPersonne);
            upt.execute();
            upt.getConnection().close();
     
        }
    }
        /*
       public ArrayList List()
        {
        Statement tab=null;
        ResultSet resultat=null;
        
        resultat=tab.executeQuery("SELECT * FROM tblpersonnes");
        
        }
        
    }
       
    */
    Faudrait-il que je crée une méthode getcreateStatement sur le modèle de getPreparedStatement? Je l'ai fait mais après je ne sais pas quoi en faire.

  4. #4
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Citation Envoyé par bandit_debutant Voir le message
    Faudrait-il que je crée une méthode getcreateStatement sur le modèle de getPreparedStatement? Je l'ai fait mais après je ne sais pas quoi en faire.
    Pourquoi s'embêter ? Tu peux très bien utiliser la méthode getPreparedStatement en lui passant ta requête "SELECT *" ! Sauf que tu n'auras pas besoin de faire de setString car tu n'as pas de clause WHERE.

  5. #5
    Membre confirmé Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Par défaut
    merci encore, mais j'aurais une autre question: je mets où mon résultat? D'après la doc Java, la méthode execute() renvoie un boolean, mais j'ai besoin d'un ResultSet(?)
    J'ai fait:

    PreparedStatement tab = getPreparedStatement("SELECT * FROM TblPersonnes);
    tab.execute();

  6. #6
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Regarde du côté de l'executeQuery

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

Discussions similaires

  1. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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