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 :

[Debutant]JDBC MySQL Classe Database


Sujet :

JDBC Java

  1. #1
    Membre régulier Avatar de userB
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 147
    Points : 106
    Points
    106
    Par défaut [Debutant]JDBC MySQL Classe Database
    Bonjour tout le monde,
    Je suis en train de m'initier à Java et j'avoue rencontrer enormement de probleme.
    Pour m'autoformer je voulais faire une petite appli qui se connecte à une base MySQL, execute qq requetes de types select, quelques requetes d'action et clos la connection.

    Deja premiere question :
    *Est ce qu'il vaut mieux creer une classe Database qui va s'occuper de gerer l'ouverture/fermeture ainsi que l'execution des requetes.

    *Ou est ce qu'il est preferable de faire des objets qui ont les memes attributs que les champs de la table et de les lier (de facon plus ou moins magiques peut etre avec implement ? )

    Comme vous le voyez je sais pas trop comment m'y prendre et je n'ai pas trouvé de bon tuto qui illustrent la chose.

    Je suis donc parti sur une classe Database, mais j'ai de gros probleme :
    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
     
    public class C_Database {
     
        // attributs
    Connection con;
    ResultSet results;
    ResultSetMetaData rsmd;
    DatabaseMetaData dm;
    String catalog;
    String types[];
     
        public C_Database(String driver) {
            types = new String[1];
            types[0] = "TABLES";
        try {
         Class.forName(driver);
         }
         catch(Exception e){
         System.out.println("Erreur lors du chargement du driver:"+ e.getMessage());
           }
        }
    public void Open(String url,String login,String password)
    {
     try{
      con = DriverManager.getConnection(url, login, password);
      dm = con.getMetaData();
      results = new ResultSet(dm.getCatalogs());
      String s[];
      while(results.hasMoreElements()) {
       s = results.NetxElement();
      }
     }
     catch(Exception e){
      System.out.println("echec d'ouverture:"+e.getMessage());
     }
    }
    ////////////////////////////////////////////////////////////////////////////////
    public void Close()
    {
     try{
      con.close();
     }
     catch(Exception e){
      System.out.println("echec lors de la fermeture:"+e.getMessage());
     }
    }
    Mon probleme est que sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    results = new ResultSet(dm.getCatalogs());
    Netbeans me dit que la classe ResultSet est abstraite et qu'on ne peut pas l'instancié.

    1 ligne plus bas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      while(results.hasMoreElements()) {
       s = results.NetxElement();
    Fatalement ici ca ne marche pas non plus, les methodes invoquées ne sont pas trouvés par le compilateur.

    Je patoge severe dans la semoule, help.
    Si tu ne sais pas m'expliquer pourquoi ca ne marche pas, alors tu ne sauras pas m'expliquer pourquoi ca marche.. -Un illustre chef de projet-

  2. #2
    Membre régulier Avatar de userB
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 147
    Points : 106
    Points
    106
    Par défaut
    Bon j'avance un peu, j'ai rettapé ma classe Connection, voici a quoi elle ressemble :

    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
     
    public class C_Connection {
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null; 
        String pilote = "com.mysql.jdbc.Driver";
     
        public C_Connection(String P_Driver) {
            pilote = P_Driver;
     
            try
            {
                Class.forName(pilote);
                con = DriverManager.getConnection("jdbc:mysql://localhost/excilys","root","");
                Statement instruction = con.createStatement();
            }
            catch (Exception e)
            {
                System.out.println("echec pilote : "+e);
            }  
        } 
        public void CloseConnection()
        {
             try{
                con.close();
            }
            catch(Exception e){
                System.out.println("echec lors de la fermeture:"+e.getMessage());
            }
        }   
       public ResultSet SqlQuery(String P_String)
       {
           ResultSet rs = null;
           try{
               rs = stmt.executeQuery(P_String);
           }
           catch (Exception e)
           {
               System.out.println("echec execution requete:"+e.getMessage());
           }
           return (rs);
       }    
    }
    Et voici le code de mon main pour l'exploiter
    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
     
            connectDB = new C_Connection("com.mysql.jdbc.Driver");
            rsListing =  connectDB.SqlQuery("SELECT * FROM Joueurs");
            try
            {
            while (rsListing.next())
              {
                    System.out.println("---------------------------");
                    System.out.println("Num du Joueur: "+rsListing.getString("jNum"));
                    System.out.println("Pseudo du Joueur: "+rsListing.getString("jPseudo"));
                    System.out.println("Points: "+rsListing.getString("jPoints"));  
              }
            }
            catch (Exception e){
                System.out.println("echec exploitation rs:"+e.getMessage());
            }
            connectDB.CloseConnection();
    Le probleme est que je n'arrive pas a dialoguer avec la BDD, en effet ma fonction qui est sensé me permettre d'executer mes requetes ne fonctionne pas.
    Voici les logs d'execution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echec execution requete:null
    echec exploitation rs:null
    BUILD SUCCESSFUL
    Des idées ?

    Merci d'avance.
    Si tu ne sais pas m'expliquer pourquoi ca ne marche pas, alors tu ne sauras pas m'expliquer pourquoi ca marche.. -Un illustre chef de projet-

  3. #3
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Reponse :
    Première erreur dans votre code :
    Dans votre méthode SqlQuery(String P_STRING)... stmt n'existe pas !
    Il fait certainnement référence à un objet Statement sensé avoir été créé par la méthode createStatement() d'un objet Connection.
    D'après la définition de vos variables de classe, l'objet Statement prévu pour représenté l'exécuteur de requete de la connexion en cours, est bien stmt, mais il vaut null.
    En effet, dans votre constructeur de la classe C_Connection, vous définissez une nouvelle variable locale instruction pour représenter l'exécuteur de requete créé par con.createStatement().
    Pour corriger votre code, il suffit donc dans le constructeur de remplacer :
    Statement instruction = con.createStatement();
    par :
    stmt = con.createStatement();

    Votre code devrait alors fonctionner.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

Discussions similaires

  1. [JDBC][MYSQL] class not found.
    Par hellboy dans le forum JDBC
    Réponses: 2
    Dernier message: 09/10/2006, 21h22
  2. Réponses: 3
    Dernier message: 19/03/2006, 09h10
  3. [debutant] probleme chargement driver (jdbc, mysql)
    Par ADSL[fx] dans le forum JDBC
    Réponses: 9
    Dernier message: 12/03/2006, 12h10
  4. [debutant]JDBC+Mysql
    Par dark2 dans le forum JDBC
    Réponses: 1
    Dernier message: 07/03/2006, 08h51
  5. [POO] Débutant en POO, class mysql php5
    Par ouafouaf dans le forum Langage
    Réponses: 9
    Dernier message: 06/02/2006, 09h21

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