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 :

Classe connection pour mysql


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 140
    Par défaut Classe connection pour mysql
    Bonjour, je veux créer une classe permettant de se connecter ou se déconnecter de ma base de donnée.
    J'ai fait ceci, mais je ne suis pas du tout sur de moi surtout pour la déconnexion car j'ai une erreur sur stmt.close ainsi que sur conn.close
    Pouvez-vous m'aider? merci d'avance.


    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
     
     
    package Test;
     
    import java.beans.*;
    import java.sql.*;
    import java.awt.*;
    import java.sql.*;
    import java.util.*;
    import javax.swing.JLabel;
    import com.mysql.jdbc.Statement;
    import com.mysql.jdbc.Connection;
     
    public class GestionConnectBdD {
     
        static String url; //10.104.100.57
        static ResultSet rs;
     
        public static void Connection(JLabel res, JLabel auto, String User, String Pass, String IP, String Port, String Nom) throws ClassNotFoundException, SQLException {
     
            Connection conn;
            Statement stmt;
     
            String pilote = "org.gjt.mm.mysql.Driver";
     
     
     
            Class.forName(pilote);
     
            conn = (Connection) DriverManager.getConnection(url);
     
            stmt = (Statement) conn.createStatement();
     
     
     
        }
     
        public static void Deconnection() {
            rs = GestionConnectBdD.rs;
            rs.close();
            stmt.close();
            conn.close()
     
        }
    }

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Arrête avec ces static partout !!! Banni ce mot clé de ta programmation. Ce n'est pas comme ça qu'on code en Java.
    Pour le reste il serait bien que tu exploites les ressources de ce site, la et les cours et tutoriels.
    Et aussi que tu sois plus claire sur tes problèmes, quelles erreurs as-tu ? On ne peut pas deviner.
    Sauf si là, pour le coup, le rs.close() doit faire une NullPointerException !

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Plein d'erreurs

    d'abord, stm et conn on été déclaré dans la méthode de connection, il ne seront donc pas visible de l'extérieur ni des autres méthodes. Déplace les, au minimum, en champs de classe.

    Ensuite, on ne commence jamais, par convention, le nom d'une méthode par une majuscule. Un méthode commence toujours par un minuscule et devrait, idéalement, au moins conenir un verbe (qu'on sache ce qu'elle fait) -> tu devrais avoir connect(....) et disconnect(....) pour faire lisible.

    Enfin, je ne suis pas sur que l'utilisation de champs statique et de méthodes statiques soit le plus judicieux (mais c'est pas catastrophique non plus, juste mal designé)

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Ah oui pas faux, ça ne compile même pas en fait.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 140
    Par défaut
    avec le static je peux faire appel à une méthode depuis une autre classe non ?

    et ceci vous va : ?
    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
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package Test;
     
    import java.beans.*;
    import java.sql.*;
    import java.awt.*;
    import java.sql.*;
    import java.util.*;
    import javax.swing.JLabel;
    import com.mysql.jdbc.Statement;
    import com.mysql.jdbc.Connection;
     
    public class GestionConnectBdD {
     
        static String url; //10.104.100.57
        static ResultSet rs;
        Connection conn;
        Statement stmt;
     
        public void Connection(JLabel res, JLabel auto, String User, String Pass, String IP, String Port, String Nom) throws ClassNotFoundException, SQLException {
     
            String pilote = "org.gjt.mm.mysql.Driver";
     
            Class.forName(pilote);
     
            conn = (Connection) DriverManager.getConnection(url);
     
            stmt = (Statement) conn.createStatement();
        }
     
        public void Deconnection() throws SQLException {
            rs.close();
            stmt.close();
            conn.close();
     
        }
    }

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par mimi51340 Voir le message
    avec le static je peux faire appel à une méthode depuis une autre classe non ?
    Rien à voir. Direction les tutoriaux java tout de suite! Static indique que toutes les instances de ta classe partageront cette donnée. Les champs statique ne servent que dans certains cas bien précis. Si tu ne sais pas si il faut un champ statique ou pas et pourquoi, c'est que la réponse est non. Dans la même veine, les méthode statiques ne son pas liées à une instance d'un classe. Elle n'auront donc accès que aux champs statique.

  7. #7
    Membre confirmé
    Profil pro
    INGENIEUR DE RECHERCHE
    Inscrit en
    Février 2003
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : INGENIEUR DE RECHERCHE

    Informations forums :
    Inscription : Février 2003
    Messages : 74
    Par défaut
    Bonjour,

    Une méthode avec le modificateur "static" n'est pas instanciée. La méthode est appelée avant la création de l'objet. Les objets peuvent aussi avoir besoins d'une méthode sans rapport directe avec leur...objet.

    Dire qu'il faut exclure toute utilisation du modificateur static est un avis extrême . Comme tout extrémisme ces avis sont liés à une expérience émotionnelle, mais là c'est plutôt de la philo!

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    j'ai juste dit que, si tu sais pas si çà doit être statique, c'est que çà l'est pas. La pluspart des champs sont des champs d'objet, moins de 10% sont statique. Comme il a l'air de débuter vaux mieux qu'il mettre pour commencer trop peu de statique de de trop. Sinon on fini avec un code sans un seul objet, comme c'est souvent le cas quand on par de static void main sans comprendre la suite du code On balance tout en statique et le classes deviennent de simples librairies.

  9. #9
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par spiale Voir le message
    Dire qu'il faut exclure toute utilisation du modificateur static est un avis extrême.
    Faut pas tout de suite interpréter de façon extrème. Quand on s'adresse à un débutant, il faut de toute façon dire l'extrème pour ensuite adoucir, sinon c'est moins bien compris.

    Si c'est pour mettre du static partout, faut pas faire du langage objet...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Salut regarde ce code c'est celui que j'utilise
    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
    public class SqlConnection {
     
        private static final Logger log = Logger.getLogger(SqlConnection.class);
     
        /**
         * @return Returns a connection
         */
        public static Connection getConnection() {
            Connection conn = null;
     
            try {
                String dbUser = utilisateur;
                String dbPasswd =motDePass;
                String dbURL = URL;
                String dbName = nonDeTaBase;
                String jdbcDriver = com.mysql.jdbc.Driver;
     
                Class.forName(jdbcDriver).newInstance();
                String URL = dbURL + dbName;
                conn = (Connection) DriverManager.getConnection(URL, dbUser, dbPasswd);
     
            } catch (InstantiationException e) {            
                e.printStackTrace();
                log.error("ERREUR : " + e.getMessage());
            } catch (IllegalAccessException e) {         
                e.printStackTrace();
                log.error("ERREUR : " + e.getMessage());
            } catch (ClassNotFoundException e) {      
                e.printStackTrace();
                log.error("ERREUR Impossible de charger le pilote jdbc:mysql: " + e.getMessage());
            } catch (SQLException e) {            
                e.printStackTrace();
                log.error("ERREUR de connexion à la base: " + e.getMessage());
            }        
     
            return (conn);
        }
     
        /**
         * @param conn
         */
        public static void closeConnection(Connection conn) {
            try {
                if (conn != null)
                    conn.close();
            } catch (SQLException e) {
                log.error("ERREUR de fermeture à la base: " + e.getMessage());
            }
        }
    }
    Voilà

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 140
    Par défaut
    j'ai fait 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
    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
    package Test;
     
     
    import com.mysql.jdbc.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.logging.Logger;
     
    public class SqlConnection {
        private static String url = "jdbc:mysql://10.104.100.57:3306/";
        private static String nonDeTaBase = "snecma";
        private static String motDePass = "root";
        private static String utilisateur = "root";
     
        private static final Logger log = Logger.getLogger(SqlConnection.class);
     
        /**
         * @return Returns a connection
         */
        public static Connection getConnection() {
            Connection conn = null;
     
            try {
                String dbUser = utilisateur;
                String dbPasswd =motDePass;
                String dbURL = url;
                String dbName = nonDeTaBase;
                String jdbcDriver = "org.gjt.mm.mysql.Driver";
     
                Class.forName(jdbcDriver).newInstance();
                String URL = dbURL + dbName;
                conn = (Connection) DriverManager.getConnection(URL, dbUser, dbPasswd);
     
            } catch (InstantiationException e) {            
                e.printStackTrace();
                log.error("ERREUR : " + e.getMessage());
            } catch (IllegalAccessException e) {         
                e.printStackTrace();
                log.error("ERREUR : " + e.getMessage());
            } catch (ClassNotFoundException e) {      
                e.printStackTrace();
                log.error("ERREUR Impossible de charger le pilote jdbc:mysql: " + e.getMessage());
            } catch (SQLException e) {            
                e.printStackTrace();
                log.error("ERREUR de connexion à la base: " + e.getMessage());
            }        
     
            return (conn);
        }
     
        /**
         * @param conn
         */
        public static void closeConnection(Connection conn) {
            try {
                if (conn != null)
                    conn.close();
            } catch (SQLException e) {
                log.error("ERREUR de fermeture à la base: " + e.getMessage());
            }
        }
    }
    Mais apparemment il y a des problèmes mais je ne sais pas comment les résoudre:
    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
    D:\projet\Integration\src\Test\SqlConnection.java:15: cannot find symbol
    symbol  : method getLogger(java.lang.Class<Test.SqlConnection>)
    location: class java.util.logging.Logger
        private static final Logger log = Logger.getLogger(SqlConnection.class);
    D:\projet\Integration\src\Test\SqlConnection.java:36: cannot find symbol
    symbol  : method error(java.lang.String)
    location: class java.util.logging.Logger
                log.error("ERREUR : " + e.getMessage());
    D:\projet\Integration\src\Test\SqlConnection.java:39: cannot find symbol
    symbol  : method error(java.lang.String)
    location: class java.util.logging.Logger
                log.error("ERREUR : " + e.getMessage());
    D:\projet\Integration\src\Test\SqlConnection.java:42: cannot find symbol
    symbol  : method error(java.lang.String)
    location: class java.util.logging.Logger
                log.error("ERREUR Impossible de charger le pilote jdbc:mysql: " + e.getMessage());
    D:\projet\Integration\src\Test\SqlConnection.java:45: cannot find symbol
    symbol  : method error(java.lang.String)
    location: class java.util.logging.Logger
                log.error("ERREUR de connexion à la base: " + e.getMessage());
    D:\projet\Integration\src\Test\SqlConnection.java:59: cannot find symbol
    symbol  : method error(java.lang.String)
    location: class java.util.logging.Logger
                log.error("ERREUR de fermeture à la base: " + e.getMessage());

    Merci encore.

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu utilise bien une java >=1.4 pour ta compilation?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    tu essaies de recompiler sans utiliser les Logger, mais normalement ça devrait marcher

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 140
    Par défaut
    si je n'utilise pas les Logger, comment les utiliser ?

  15. #15
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Normalement, java.util.logging.* est disponible à partir de java 1.4 Avec quelle version de java tu tente de compiler?

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 140
    Par défaut
    je suis en java 1.6

  17. #17
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    toutes mes excuse, confusion de ma part

    alors d'abord, c'est getLogger(SqlConnection.class.getName())
    ensuite, c'est log.severe(message) et pas log.error(message)

    Tu as utilisé en fait l'api java.util.Logging, avec les conventions de log4j, ce qui n'est pas la meme chose, d'ou ma confusion, j'ai pas remarqué de suite.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    oui effectivement il falait ce jar par exemple : log4j-1.2.9.jar, donc supprime toutes les lignes avec log4j et essaie de compiler voir si tu as un erreur

Discussions similaires

  1. Utilisation d'une classe connexion pour MySQL
    Par nolookpass8 dans le forum Développement Web en Java
    Réponses: 7
    Dernier message: 02/04/2013, 17h42
  2. [Java SE] Recherche classe Java pour MySQL (CRUD) ?
    Par vandeyy dans le forum Général Java
    Réponses: 1
    Dernier message: 26/06/2012, 15h03
  3. [MySQL] Modification d'une classe requêtant pour MySQL
    Par gimpycpu dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 06/03/2008, 00h16
  4. CONNECT BY PRIOR oracle pour MySQL : possible ?
    Par thanaos dans le forum Requêtes
    Réponses: 1
    Dernier message: 12/12/2006, 15h11
  5. Réponses: 3
    Dernier message: 05/10/2006, 17h15

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