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

NetBeans Java Discussion :

Base de données Mysql - netbeans


Sujet :

NetBeans Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Par défaut Base de données Mysql - netbeans
    Bonjour à tous...et joyeux noel...

    A tout hasard, je pose ou plutot je repose la question dans le forum de netbeans..si toutefois quelqu'un pourrait m'aider ou m'orienter vers la solution..
    Au modérateur de supprimer éventuellement le message faisant double emploi dans le forum java jdbc... ( merci d'avance..)

    D'où mon problème :

    Je suis entrain de créer une application avec plusieurs forms ( sous netbeans..).
    Cette application comprend une base de données auquels les différentes forms doivent pouvoir accéder...

    J'ai crée une classe qui accède la base de données en sql :

    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
     
     
     
     
    public class AccesBase {
     
     
     public void base()  {      
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
     
     
        String url = "jdbc:mysql:///Data1" ;
        String login = "root";
        String password = "adminadmin";
     
             Connection connexion = null;
             Statement inssql = null;
     
     
     
        //    connexion = (Connection) DriverManager.getConnection("jdbc:mysql:///Data1");
     
            connexion = (Connection) DriverManager.getConnection(url,login,password);
            JOptionPane.showMessageDialog(null,"Connection OK");
     
            inssql = (Statement) connexion.createStatement();
     
     
        }
        catch (ClassNotFoundException ex)
        {
           JOptionPane.showMessageDialog(null,"Classe introuvable"+ ex.getMessage());
     
        }
        finally
        {
            if (connexion!= null)
                connexion.close();
        }
     
     
     
       }
     
    }
    Ensuite, j'ai une autre form avec des zones de saisies de texte ainsi que différents boutons de validation.
    Je souhaites lorsque je cliques sur un des boutons, insérer des données dans ma base.

    Or, au moment de la saisie du code, je n'ai aucune complétition de code qui me confirme qu'il me trouve le mot clef de la classe d'accès à la base de données ( inssql ),

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     
      private void jButtonAjoutValeurMouseClicked(java.awt.event.MouseEvent evt) {                                                
            // TODO add your handling code here:
     
         AccesBase.inssql.executeUpdate("INSERT INTO IDENTIFICATIONVALEUR (ID,CODEVALEUR,NOMVALEUR)" + "VALUES (1,'123','EDF')");
     
     
     
     
     
        }
    et j'ai également un message d'erreur m'indiquant :
    Citation:
    /NetBeansProjects/Bourse/src/bourse/FicheValeur.java:219: cannot find symbol
    Il s'agit ici de l'instruction inssql...

    Comment faire pour que ma base de données soit accessible à partir d'une seule classe à l'ensemble des forms de mon application..aussi bien pour effectuer des resquêtes que pour mettre à jour des données par exemple..?

    Merci d'avance ..
    a+

  2. #2
    Expert confirmé


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Par défaut
    insql n'est pas public, donc pas accessible en dehors de AccessBase.
    Et ce serait pas une bonne idée de le mettre public.
    Vaudrait mieux créer une méthode dans ta classe AccessBase, qui contient
    un truc similaire à ce que tu as mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    AccesBase {
     boolean ajoutValeur(//parametres
                      } {
          //...
          inssql.executeUpdate("INSERT INTO IDENTIFICATIONVALEUR (ID,CODEVALEUR,NOMVALEUR)" + "VALUES (1,'123','EDF')");
         //...
    Et que t'appelerais depuis ta form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private void jButtonAjoutValeurMouseClicked(java.awt.event.MouseEvent evt) {                                                
            // TODO add your handling code here:
     
         AccesBase.ajoutValeur(//Les paramètres  à passer
                       );
     
        }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Par défaut
    Merci pour ta réponse Vincent..

    Je ne voits pas trop comment utiliser cette méthode..
    Le problème c'est qu'il y aura plusieurs paramètres à passer en fonctions de différentes forms que je vais rajouter.
    Par exemple, je vais créer une form dans mon application qui permettra à l'utilisateur d'obenir des statistiques ( donc form qui comprendra des requetes sql), une autre form ou l'utilisateur saisira certaine données x, qui viendront eux compléter la base de données..etc..

    Jusqu'à présent, j'utilisait ce principe :

    import AccesBase.*;

    Test CeciTest = New Test();

    et dans le source d'une autre form, il me suffisait de faire :

    AccesBase.CeciTest.... etc..

    Et ceci que je pensait faire pour me connecter à la base de donnée et récupérer le statement..

    Maintenant, je ne suis pas expert en java..( n'ayant pas appris ce langage) .je me trompe peut etre sur la manière de procéder..?

    a+

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut
    il me semble qu'il est preferable de retourner une connection plus tot qu'un Statement, d'autre part:
    je vais créer une form dans mon application qui permettra à l'utilisateur d'obenir des statistiques
    dans ce cas il te faudra gerer les donnees que tu obtiendras dans un ResultSet
    et celui ci va varier en fonction des tables que tu vas interogé

    Bon je debute aussi mais va jeter un oeil la dessu sa te donera peut etre une idée
    http://www.developpez.net/forums/sho...d.php?t=461841

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Par défaut
    Bon ..après moult réfléxions et creusement de la tête...( quand on vieillit ça ne s'arrange pas... lol .)
    J'ai donc fini par trouver ou celà coinçait chez moi..
    Pour résumer la déclaration de la variable de transmission entre import ou classes externes... était placée au mauvait endroit..
    Donc voici le code rectifié avec en gras le positionnement de la variable statement..

    La classe qui gère la base de données :

    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
    public class AccesBase {
     
     
        Statement inssql = null;
        
           public void base () throws SQLException {
     
        String url = "jdbc:mysql:///Data1" ;
        String login = "root";
        String password = "adminadmin";
        
             Connection connexion = null;
       
             Statement instructionsql = null;
           
             inssql = instructionsql;
            
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            
                  
            
        //    connexion = (Connection) DriverManager.getConnection("jdbc:mysql:///Data1");
      
            connexion = (Connection) DriverManager.getConnection(url,login,password);
            JOptionPane.showMessageDialog(null,"Connection OK");
            
            instructionsql = (Statement) connexion.createStatement();
           
             
        }
        catch (ClassNotFoundException ex)
        {
           JOptionPane.showMessageDialog(null,"Classe introuvable"+ ex.getMessage());
        
        }
        finally
        {
            if (connexion!= null)
                connexion.close();
        }
       }
    }

    La class d'une JFORM qui sera un masque de saisie qui alimentera la base de donnée..Pour des raisons de lisibilité j'ai supprimé le code supperflu...

    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
    import AccesBase;
    
    
    etc..etc..
    
    public class FDescValeur extends javax.swing.JFrame  {
        
     
     
          AccesBase AB = new AccesBase();
    
    
    etc..etc..
    
    
     private void jButtonAjoutValeurMouseClicked(java.awt.event.MouseEvent evt) {                                                
            // TODO add your handling code here:
            
         
            AB.inssql.executeUpdate(arg0);
         
           
     
        }

    Pour les explicatrions :

    1) Création d'une classe qui permet l'accès à la base de données avec mise en place d'un statement..

    2) Lors de la création d'une JFORM externe à la classe d'accès de la base de données, j'effectue un import de l'accès à la base..

    3) Je crée une nouvelle instance AB ( AccesBase AB = new AccesBase() )

    4) Sur un des boutons de cette fenetre ( jbuttonAjoutValeurMouseClicked , j'associe AB au statement qui me permet d'effectuer un execuUpdate sur la base
    ( je n'ai pas rajouté le reste des instructions sql dans la ligne également pour des raisons de lisibilité...)

    5) J'ai conscience qu'il y a redondance dans les noms de variable et de nouvelle instance..c'est juste pour simplifier l'explication...


    Voilà Donc j'en ferais autant pour les autres classes de JFORM que je vais créer donc des imports de l'accès à la base de données..
    C'est donc plus simple que de devoir à chaque fois remettre le meme code d'accès avec statement dans chaque class de Jform..
    Non .? Qu'en pensez vous .?

    ps : en espérant que le programme tournera ..car pour l'instant pas encore fait de Run.... j'aurais plus trop le timing ce soir...


    En tous les cas merci à tous , et pour Galeo si ça peut également t'aider...

    Je laisse le post encore d'ouvert... Lorsque je runerais le programme je mettrais tag résolu...


    Meilleurs voeux également à tous..et surtout de santé....portez vous bien ...

    a+

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Par défaut
    Bonjour et meilleurs voeux à tous, et surtout la santé...

    J'ai un autre problème qui se pose :
    Lorsque j'effectue un executeUpdate pour insérer des éléments dans la base de données..je n'ai aucune mise à jour du nouvel élément qui se fait..
    J'ai presque l'impression que malgré mon code de connection à la base de données, celle ci n'est pas ouverte.. Donc mon executeUpdate n'a aucun effect..

    Quand je modifie l'url d'accès de la base..et que je met par exemple ma
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String url = "jdbc:mysql:///Data1" ;
    à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String url = "jdbc:mysql:///Data1JourdeLan" ;
    Je n'ai aucun message de connection non réussi...
    Si j'ai bien compris la connection par rapport au drivers jdbc:mysql est faite ..mais pas au niveau d'accès de la base de données en elle même ...
    Que faut il effectuer en plus comme manip.?

    Merci d'avance..
    a+

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/10/2012, 15h42
  2. probleme construction base de donnes MySql...Help
    Par chakan dans le forum Requêtes
    Réponses: 7
    Dernier message: 21/07/2004, 11h27
  3. connection à base de donnée MYSQL
    Par zouzou_zaza dans le forum Bases de données
    Réponses: 11
    Dernier message: 04/07/2004, 12h31
  4. XML->Base de donnée Mysql
    Par lheureuxaurelie dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 10/03/2004, 23h47

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