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 :

Gestion des requetes


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 Gestion des requetes
    Bonjour

    Je me demande quel serait la bonne organisation au niveau de l'utilisation des requêtes sql dans une application bureaux. J'en developpe une petite sur mon ordinateur, elle consiste simplement (pour l'instant à gérer des patients).

    Pour l'instant j'ai en quelques sorte une Jlist qui affiche par un select tous mes personne se trouvant ds ma BD.

    J'ai fait un formulaire pour gérer l'INSERT d'une personne.

    J'ai fait aussi un system de trie avec une combobox avec les nom et prenom des personnes. C'est là d'ou mon probleme.

    Je ne sais pa si je dois faire un SELECT ou un UPDATE de ma table (pour ma jlist) lorsqu'un utilisateur se créera.

    C'est à dire pour l'instant, mon application se lance, elle iniatialise ma Jliste avec un SELECT et un trie par le "nom". Puis admettons qu'un utilisateur s'ajoute, je souhaite lorsque j'utilise par combobox pour afficher mes personnes dans ma jlist selon un trie, QU'ELLE SOIT MISE A JOUR selon le derniere enregistrement qu'elle a obtenu ds ma BD.

    Je ne sais pas si je dois refaire une methode en utilisant un UPDATE ou un SELECT.

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu as fais quoi pour l'instant ?
    Ta as construit la liste dans le constructeur de la fenêtre ?
    Il faudrait dégager le code de chargement de la liste dans une méthode distincte et l'appeler du constructeur et des listeners.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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
    Citation Envoyé par OButterlin Voir le message
    Tu as fais quoi pour l'instant ?
    Ta as construit la liste dans le constructeur de la fenêtre ?
    Il faudrait dégager le code de chargement de la liste dans une méthode distincte et l'appeler du constructeur et des listeners.
    Pour l'instant:
    * j'ai une classe qui hérité de JFrame ou il y a principalement tous le côté graphique.

    * J'ai un classe personne.

    * J'ai une classe Controller qui sert à me connecter à ma BD selon plusieurs methodes (INSERT et SELECT) et à insérer dans un arraylist toutes mes personnes

    Dans ma classe Jframe, j'ai une methode qui trie selon les noms et prenom de ma Jlist. J'initialise cette Jlist avec l'appel d'une methode se trouvant dans ma classe Controller.
    J'essaye de mettre à jour comme je l'ai expliqué ma jlist lorsqu'il y a un utilisateur qui se crée mais je n'arrive pas à le faire. Si j'utilise ma methode d 'iniatialisation (avec un SELECT), cela ne marche pas. (cela double en plus le nombre de lignes se trouvant ds ma BD bizarre et cela ne la met pas à jour).

    Je ne sais pas si il faut utiliser un SELECT ou un UPDATE. Voici les deux methodes que j'uitlise, c'est à dire la connexion à ma BD (se trouvant ds la classe Controller) et la methode trie (se trouvant ds la classe JFrame).

    Classe Connection:
    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 UpdateUser() {
            PersonneBean pers = new PersonneBean();
            String driver = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://localhost/osteo";
            String login = "root";
            String password = "mysql";
            try {
                Class.forName(driver);
                con = DriverManager.getConnection(url,login,password);
                stmt = con.createStatement();
                requete = "UPDATE INTO personne(id,nom,prenom,naissance,adresse,profession,mobile,telephone,email,dateConsult,remarques,motif,antecedants,operations,traitement,examens) VALUES('"+pers.getId()+"','"+pers.getPrenom()+"','"+pers.getNom()+"','"+pers.getPhone()+"','"+pers.getMobile()+"','"+pers.getEmail()+"','"+pers.getNaissance()+"','"+pers.getAdresse()+"','"+pers.getProfession()+"','"+pers.getDateConsult()+"','"+pers.getRemarques()+"','"+pers.getMotif()+"','"+pers.getAntecedants()+"','"+pers.getOperations()+"','"+pers.getTraitement()+"','"+pers.getExamens()+"')";
                //requete= "SELECT * FROM personne";
                System.out.println(requete);
                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();
            }
            finally {
                try {
                    if (con != null) con.close();
                    if(stmt !=null){try{stmt.close();}catch(Exception e){e.printStackTrace();}}
                } catch (SQLException ex) {
                    Logger.getLogger(LogController.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    Classe trie qui utilise une classe comprator pour le trie:
    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
    public void trie(){
            dlm.removeAllElements();
            jComboBox2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    Object obj=jComboBox2.getSelectedItem();
                    if(obj.equals("Nom")){
                        Collections.sort(controller.getPersonnes(), new PersonneComparator(CompareType.NOM));
                        updateJlist();
                    }else if(obj.equals("Prenom")){
                        Collections.sort(controller.getPersonnes(), new PersonneComparator(CompareType.PRENOM));
                        updateJlist();
                    }else if(obj.equals("Date RDV")){
                        Collections.sort(controller.getPersonnes(), new PersonneComparator(CompareType.DATECONSULT));
                        updateJlist();
                    }
                    jList1.setModel(dlm);
                }
            });
        }
    Cette méthode trie appel la methode updateJlist (tjs dans la classe Jframe) qui celle ci fait l'appel de la methode connexion se trouvant dans la classe Controller:
    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
    //UPDATE D'UN JLIST
        public void updateJlist() {
            dlm.removeAllElements();
            if (controller != null) {
                controller.UpdateUser();
                //controller.ListUser();
                if (controller.hasPersonne()) {
                    for(int i=0;i<controller.getPersonnes().size();i++){
                        System.out.println(controller.getPersonnes().size());
                        personne = controller.getPersonnes().get(i);
                        jTextField7.setText(personne.getNom());
                        jTextField1.setText(personne.getPrenom());
                        jTextField9.setText(personne.getDateConsult());
                        dlm.addElement(" - "+personne.getPrenom()+" "+personne.getNom()+" ------ Vu le "+personne.getDateConsult());
                    }
                }
            }else{
                System.out.println("Vous n'avez pas initalisé l'objet");
            }
            jList1.setModel(dlm);
        }
    J'obtiens une SQLexcption mais je ne vois pas l'erreur ds cette requete:
    UPDATE INTO personne(id,nom,prenom,naissance,adresse,profession,mobile,telephone,email,dateConsult,remarques,motif,antecedants,operations,traitement,examens) VALUES('0','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null')

    Merci de encore

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    La syntaxe d'UPDATE est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE nomTable
    SET nomColonne = valeur (ou 'valeur' en fonction du type)
    [WHERE condition]
    Toi, tu es parti sur la syntaxe de l'INSERT...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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
    Citation Envoyé par OButterlin Voir le message
    La syntaxe d'UPDATE est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE nomTable
    SET nomColonne = valeur (ou 'valeur' en fonction du type)
    [WHERE condition]
    Toi, tu es parti sur la syntaxe de l'INSERT...
    Oui je suis allez trop vite en recopiant Mais en faite en me documentant un peu, l'UPDATE et proche de l'INSERT. Il sert à modifier des attributs dans la BD ?? Et non à la mettre à jour proprement parlé.

    Car moi, j'ai juste besoin qu'il me met à jour ma Jlist des que l'utilisateur utilisera la combobox (avec celle ou je fais un listener sur ma methode de trie). Je crois donc que j'ai besoin d'utiliser un SELECT.
    J'ai fait le changement pour ma methode connexion, je n'ai plus de probleme de sqlexception et il me met bien le bon nombre de ligne mise à jour MAIS il me met pas à jour ma Jlist.

    Si j'integre un utilisateur, j'ai tjs l'ancienne list de personnes.

    Par exemple, voici comment fonctionne mon appli:
    * Je lance une methode "initViewUser" qui fait un SELECT et place toutes les personnes dans une jlist.
    * J'ai mis une combobox avec comme item (nom et prenom et dateConsult) qui lorsque j'appuie sur "nom", cela me fait un trie alphabetique de toutes mes personnes. (cela fonctionne bien)
    * Maintenant j'insére une personne supplémentaire à ma BD à travers mon application (j'ai utilisé un INSERT)
    * Je souhaite refaire un trie avec ma combobox avec le "prenom" (ou le nom), j'obtiens toujours mon ancienne list de personnes. La personne que j'ai intégré precedement ne se trouve pas dans ma jlist

    Pourtant dans ma methode trie, je fais un SELECT de ma BD des que j'utilise la combobox, elle devrait donc s'afficher ?????????????

    Je remets ma nouvelle methode pour mon select:
    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
    public void UpdateUser() {
             String driver = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://localhost/osteo";
            String login = "root";
            String password = "mysql";
            requete = "SELECT * FROM personne";
            try {
                Class.forName(driver);
                con = DriverManager.getConnection(url,login,password);
                stmt = con.createStatement();
                ResultSet rs = stmt.executeQuery(requete);
                System.out.println(requete);
            }
            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();
            }
            finally {
                try {
                    if (con != null) con.close();
                    if(stmt !=null){try{stmt.close();}catch(Exception e){e.printStackTrace();}}
                } catch (SQLException ex) {
                    Logger.getLogger(LogController.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    Si vous avez une idée. Je ne pense pas être très loin.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Le nouvel enregistrement est bien présent en base ?

    Si oui :
    A moins d'avoir une exécution de tes méthodes dans un mauvais ordre, le "SELECT ..." devrait te ramener le nouvel enregistrement.
    Autre cas, tu utilises une connexion sans auto-commit...

    Dans tous les cas, ce n'est pas très "optimal" ta façon de coder.
    L'accès à la connexion devrait se faire via une classe utilitaire, essaye celle-ci
    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
     
    package test;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
     
    public class ConnectionUtils 
    {
        private static final String driver = "com.mysql.jdbc.Driver";
        private static final String url = "jdbc:mysql://127.0.0.1/base";
        private static final String user = "user";
        private static final String password = "pwd";
        private static final ThreadLocal<Connection> session = new ThreadLocal<Connection>();
        static
        {
            try
            {
                Class.forName(driver);
            }
            catch (Exception e)
            {
                System.out.println("ConnectionUtils, erreur " + e.toString());
            }
        }
     
        public static Connection getConnection() throws SQLException
        {
            Connection connection = session.get();
            if (connection == null)
            {
                connection = DriverManager.getConnection(url, user, password);
                session.set(connection);
            }
            return connection;
        }
     
        public static void closeConnection() throws SQLException
        {
            Connection connection = session.get();
            if (connection != null)
            {
                connection.close();
                session.remove();
            }
        }
    }
    Elle te permet de créer une connexion pour un thread. Tous les appels dans le thread font références à la même connexion.

    L'usage ressemble à ceci :
    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
     
    ...
            Statement stmt = null;
            try
            {
                stmt = ConnectionUtils.getConnection().createStatement();
                ResultSet rs = stmt.executeQuery("select * from t_utilisateur");
                while (rs.next())
                {
                    System.out.println(rs.getString(1));
                }
            }
            catch (Exception e)
            {
                System.out.println(e.toString());
            }
            finally
            {
                ConnectionUtils.closeConnection();
            }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [MySQL] gestion des requetes MySQL, priorités , etc
    Par sebhm dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/08/2009, 10h18
  2. Gestion des requetes
    Par r1cain dans le forum WebDev
    Réponses: 1
    Dernier message: 19/06/2008, 00h43
  3. Gestion des requetes de type select en mode déconnecté
    Par ninsekh dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/10/2007, 21h56
  4. Réponses: 7
    Dernier message: 05/09/2006, 09h56
  5. Réponses: 3
    Dernier message: 19/01/2006, 09h37

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