Faire un simple client MySQL dans NetBeans

Cet article fait partie de la série d'articles soumis par la communauté NetBeans dans le cadre du concours "Win With NetBeans".

NetBeans possède un bel interface pour se connecter à la DB, mais la plupart des commandes SQL doivent être introduite dans leur entièreté. J'ai fait une application Swing pour l'insertion, et la visualisation des données d'une table de base de données MySQL. Cet exemple est trè simple, disponible pour une table spécifique et sans opération de suppression ou mise à jour. Il devrait être étendu mais le document aurait été plus long et plus compliqué, je suis désolé.

INDEX

Connection à une DB MySQL

J'espère que les lecteurs ont déjà un environnement de base de données MySQL qui fonctionne, ayant une DB avec un accès à un utilisateur donné. Dans cet exemple,

nom de la base de donnée: nonidb
user: noniko
password: (blank)
<- parce que c'est simplement un exemple. Si vous avez des données importantes, veuillez définir un mot de passe!

Aussi, vous devez avoir un driver JDBC pour MySQL. J'ai récupéré le fichier mysql-connector-java-3.1.6-bin.jar via le site web du développeur MySQL.

Maintenant, allons dans NetBeans. Cliquez sur l'onglet "Runtime" .

Sélectionnez "Add Driver" dans la fenêtre Runtime

Vous trouverez le noeud "Databases" ici. Ouvrez ce noeud pour y obtenir le noeud "Drivers". Si vous ouvrez le contenu de "Drivers", vous trouverez seulement "JDBC-ODBC". La première chose à faire est de rajouter le driver MySQL. Cliquez-droit sur le noeud "Drivers" pour montrer le menu contextuel et sélectionnez "Add Driver".

La fenêtre de configuration apparait alors.

Trouvez l'emplacement du driver JDBC.

En cliquant sur le bouton "Add" vous pouvez rechercher le fichier graphiquement. Dans le cas ci-dessus, J'ai préparé le dossier D:\nonidata\nb4worksnew pour contenir les dossiers du projet et le sous-dossier lib pour contenir les fichiers de bibliothèques.

Si vous sélectionnez l'emplacement du fichier du driver, la Classe du Driver et son Nom seront remplis automatiquement. Dans le cas du driver JDBC MySQL, le nom de l'ancienne classe est d'abord mis. Mais cliquez sur le bouton "Find", et alors la barre de progression deviendra active et finallement "Searching for driver classes finished" apparaitra.

Ouvrez alors la liste déroulante de "Driver Class". Vous pouvez sélectionner le nom de la classe du driver JDBC.

Modifiez le nom de la classe pour la version actuelle.

Cliquez sur "OK". Le noeud du nouveau driver apparaitra alors sous le noeud "Driver". Cliquez-droit desssus pour sélectionner "Connect Using.." depuis le menu contextuel.

Sélectionnez "Connect Using..." depuis le menu contextuel

La fenêtre de parametrage apparaît. Ici, l'URL de la base de donnée, l'identifiant et le mot de passe sont nécessaires (dans notre cas, le mot de passe est vide). Cliquez sur OK et vous pourrez alors voir le message "Connection established" dans la barre de progression. La page peut être basculée en mode Avancé, mais dans notre cas, il n'y a pas besoin de paramètrage supplémentaire.

Après que la connection soit établie, un noeud apparait pour cette connection. Passons à l'étape suivante.

Création d'un table d'exemple

Cliquez-droit sur le noeud de la connection établie ci-dessus, Sélectionnez "Create Table...".

Sélectionnez "Create Table" dans le menu contextuel

Une fenêtre apparaît pour définir la table à créer. Pour afficher les paramètres requis, cette fenêtre doit être étendue manuellement. Les paramètres importants sont Key, Column name, Data type et Size, dépendant du type de donnée.

Création d'une table dans NetBeans

Dans notre cas, j'ai fait un simple table, "cars" ayant carid, name, vendor et type comme champs. Le champ carid est la clef primaire. Tous les champs sont de type VARCHAR. Seul carid a une taille de 10. Tous les autres en ayant une de 20.

Une fois que la table est créée, vous pouvez voir son noeud sous le noeud de connection. La structure de la table "cars" est également affichée.

L'arborescence de la table créée

Insertion des premières données

Maintenant, nous allons insérer la première ligne en envoyant une commande SQL. Cliquez-droit sur n'importe quel noeud sous le noeud connection pour pouvoir sélectionnez l'option "Execute Commands...".

Alors la large fenêtre de 'operating command' apparaît à la même place que l'Éditeur de Source. Trop large pour que je vous montre la copie d'écran. Les points importants sont, tout d'abord, la zone texte pour introduire la commande.

Introduire une commande entière.

Cliquez sur le bouton "Execute" et, si la commande est valide, vous pouvez voir le message "Command successfully excuted" apparaître en bas. Pour être vraiment sûr, cliquez-droit sur le noeud "cars" et sélectionnez "View data".

Cliquez-droit sur le noeud "cars" pour voir les données.

Premières données insérées

Yes! Les premières données ont été insérées avec succès. Mais vous pourriez trouver toute l'instruction "insert into..." ennuyante. En tout cas, moi oui. J'ai donc eu l'idée de concevoir une application pour insérer des données de façon plus graphique.

Création d'un nouveau projet Java

Nous allons créer un nouveau Projet Java pour l'Application. Sélectionnez dans le menu principal "File"->"New Project". Dans l'assistant new project, sélectionnez "General"->"Java Application" comme type de projet. Dans notre cas, le nom du projet est "mysqloperation" et son emplacement sur ma machine était "d:\nonidata\nb4worksnew\mysqloperation". Cochez "create main project".

Après avoir créer le projet, créez un nouveau paquetage. Dans notre cas, "mysqlop".

Création d'une classe utilitaire pour faire la connection à la DB

Les opérations sur les bases de données en Java sont très compliquées, requiérant des Objets connection, statement, resultset et beaucoup de try&catch. Aussi, j'ai utilisé une classe utilitaire qui se charge de toutes ces opérations.

Tout le code est indiqué ici, MyDBConnection.java.

La méthode init() est pour la connection à la DB MySQL.

La méthode getConnection() devrait être appelé après la méthode init(), pour distribuer aux autres classe la connection établie.

Deux méthodes close() et destroy() sont là pour s'occuper de la fin de l'opération. Cloturer les connections, statements, ou resulset demande pas mal de try&catch. Aussi, ils ont été isolés ici.

Pour utiliser ce fichier, le classpath pour le driver JDBC doit être défini pour ce projet. Cliquez-droit sur le projet "mysqloperation" et sélectionnez "Properties..." dans le menu contextuel. Dans la fenêtre "Project Properties", sélectionnez "Build"->"Compiling Sources".Cliquez sur le bouton "Add JAR/Folder..." près de "Classpath for Compiling Source", pour que vous puissiez indiquer l'emplacement du fichier Jar du JDBC.

Ajout du fichier Jar JDBC au classpath

Création du Modèle de Table

ensuite, j'ai préparé un Modèle de Table personnalisé pour la JTable à utiliser dans cette application.

Tout le code est disponible ici, CarTableModel.java.

Pour écrire ce code, j'ai utilisé quelques bons outils de NetBeans.
Premièrement, créez une nouveau fichier Java Class nommé CarTableModel.java. Il va créer une classe depuis un modèle vide. Il y a juste la déclaration du paquetage et de la classe.


Éditez manuellement la déclaration de classe pour étendre la classe "AbstractTableModel". L'éditeur montrera des vaguelettes rouges pour indiquer les erreurs. Une raison est le manque de l'import de la classe "javax.swing.table.AbstractTableModel". Cette erreur est résolue en cliquant-droit n'importe où dans le code et sélectionnant "Fix Imports".

Utilisez "Fix imports" tool

Vous pouvez vérifier la déclaration

import javax.swing.table.AbstractTableModel;

a été inséré au début du code source.

Mais il y a encore des vaguelettes rouges qui sont présentes. Cela est du au fait qu'il manque l'implémentation des méthodes abstraites.
Cela est résolu par l'outil "overriding method" invoqué de cette façon...

Utilisez l'outil "Overrice Methods"

Les implémentations requises sont extraites en cochant "Show Abstract Methods Only".

Les implémentations requises apparaissent dans la liste

Sélectionnez les trois méthodes en cliquant sur le noeud et "OK".

Implémentations requises sont insérées automatiquement

Maintenant, les vaguelettes rouges ont totallement disparues!

En fait, nous avons également besoin de override la méthode getColumnName(int param), autrement nous ne pourrons pas avoir des en-têtes personnalisée de la table.

Remplissons le corps des méthodes.
Le code est spécifié pour accéder à la table spécifique"cars". Le nombre de colonne est donc fixé à 4.
Chaque nom de colonne est également connu et peut être ajouté directement.

Cette fois, j'ai utilisé les Génériques, une nouvelle fonctionnalité du J2SDK 5.0, pour la première fois. Ce fonctionne à merveille dans NetBeans (Applaudissements!!!)

Création Visuelle de la JFrame

Création maintenant la JFrame. La classe principale de ce projet! "JFrame Form" peut être sélectionné dans l'assistant new. Le nom est, dans notre cas, "InsertTable", ce qui crée un fichier source "InsertTable.java".

Tout d'abord, concevons la Form. Elle devrait être une fenêtre verticalement longue, j'ai donc fixé la taille de la Form au lieu d'utiliser "packing".
Sélectionnez le noeud "JFrame" dans la fenêtre Inspector pour visualiser ses propriétés. Modifiez la valeur par défaut "Generate pack()" de la propriété "Form Size Policy" en "Generate Resize Code".

Pour fixer la taille de la Form.

La propriété "Form Size" devient alors éditable. Éditez la avec les valeurs suivantes:

La taille de la Form éditée.

Cette Form sera séparée verticallement en trois parties:

(1)JTextfields ou JComboBox pour introduire de nouvelles données.
(2)JButton pour envoyer des données et montrer un message.
(3)La JTable.

Les deux premiers devraient se situer dans un JPanel, et la JTable dans un JScrollPane. Ce sont les parties de base.

JPanels et JScrollPane pour localiser les composants.

Veuillez noter que les positions verticales des noeuds ne correspondent pas à leur reelles positions. Je veux dire par là que dataPanel, sendPanel et tablePane sont situés au Nord, Centre et Sud du BorderLayout, respectivement.

Dans le dataPanel, 3 JTextFields et un JComboBox pour introduire les données et 4 JLabels pour les explications devraient être positionnées. J'ai décidé que GridLayout est le mieux pour positionner ces éléments. Le layout par défaut du JPanel est le FlowLayout dans NetBeans. Il doit être modifié:

Changer en GridLayout

Les propriétés du GridLayout sont alors affichées. Définissez le nombre de colonne sur 2 et le nombre de lignes sur 4.

Localisez ensuite les composants. Ils peuvent être déplacés par drag&drop sur la Form, si vous n'êtes pas satisfait de leur position.

Déplacez la JComboBox dans le GridLayout.

Le composant pourrait aboutir à un mauvais endroit, comme le mauvais panel. Ne vous inquiétez pas, vous pouvez le déplacer par glisser-lâcher dans la fenêtre Inspector.

Déplacer la JComboBox dans la fenêtre Inspector.

Une fois tous les composants positionnées, personnaliser leurs noms, pour indiquer leur rôle. Personnalisez également la propriété text de chaque JLabel, et supprimer celui de chaque JTextField. Vois un exemple d'édition de la propriété "text" de JLabel:

Personnaliser la propriété "text" pour montrer "ID:"comme JLabel

Passez ensuite à sendPanel pour y positionner un JButton et un JLabel. Un GridLayout est également défini pour ce JPanel, avec une colonne et deux lignes. Le nom et la propriété "text" sont personnalisés.

De cette façon, les composants, autres que JTables, sont arrangés comme ci-dessous:

Composants, à l'exceptions de JTable ont été personnalisés.

Personnalisation JTable

Comme montré ci-dessus, la JTable a maintenant une structure de 4x4 et des données vide. Nous allons la personnaliser pour y afficher le contenu de la table "cars" de la base de données MySQL.

Sélectionnez la JTables et nommez-la "carTable" dans la fenêtre Inspector. Recherchez la propriété "model" et cliquez sur le bouton "..." situé à l'extrême droite.

carTable et sa propriété "model"

La fenêtre d'éditeur apparait. La structure par défaut 4x4 apparait dans cette fenêtre. Modifions-la en modifiant la valeur "Select Mode" du "TableModelEditor" en "FormConnection".

Basculer du mode Table Model Editor en Form Connection mode.

Dans le mode Form Connection, Cliquez sur le bouton radio de "User Code" dans la fenêtre option.

Mode Form Connection

Regardez au bas de cette fenêtre. Le bouton "Advanced" s'y trouve. Cliquez dessus!

Le bouton "Advanced" au bas de la fenêtre

Une fenêtre apparaît pour éditer avant et après le code de définition du TableModel pour la JTable. Cette fois-ci, cochez les deux.

La méthode nommée getResultFromCars devrait être créée dans le code source de "InsertTable.java" manuellement comme


 public ResultSet getResultFromCars() {
        ResultSet rs=null;
        try{
            rs=stmt.executeQuery("Select * from cars");
        }
        catch(SQLException e){}
        return rs;
    }

Cliquez sur OK pour retourner sur "User Code".

Notez que ici le point-virgule ";" pour terminer l'instruction NE DEVRAIT PAS ETRE INTRODUIT. Pourquoi ? allez vois le code source. Allez voir la méthode InitComponents(). Ici!

Zone "Protégée""Inéditable" bleu claire? Qui a dit cela? Ha-ha-ha! Vous pouvez éditer liiiiiibrement de cette façon préparée par NetBeans!

Première Exécution de InsertTable

Pour faire un premier test de cette JTable personnalisée, nous devons encore faire quelque chose. Tout d'abord, la déclaration.

private MyDBConnection mdbc;
private java.sql.Statement stmt;

Ils doivent être écrit quelque part dans la source. A la fin du fichier, près des autres variables, ce serait bien.

Ensuite, le constructeur. Notez que nous devrions y rajouter une déclaration throw

pour éviter cette ennuyante erreur de compilation "java.sql.SQLException is not reported...".

L'entièreté du constructeur est ici :

 
public InsertTable() throws  Exception{
         mdbc=new MyDBConnection();
         mdbc.init();
         Connection conn=mdbc.getMyConnection();
         stmt= conn.createStatement();
         initComponents();
    }

 

Également pour éviter la même compilation d'erreur, éditer la méthode main préparée par NetBeans:

Ajout try-catch à la méthode main

Maintenant, exécutons le projet! Une fenêtre pour sélectionner la classe principale devrait apparaître. Dans la liste, vous ne devriez y trouver que "InsertTable.class". Sélectionnez-la.

Les données de la table de MySQL sont montrées

La seule ligne existante dans la table de la base de données MySQL est maintenant affichée!

Prendre une petite précaution...

Maintenant que nous pouvons afficher des données existantes dans MySQL dans une JTable. Prenons une petite précaution pour avoir une meilleure application.

Une chose à laquelle on doit penser est de cloturer proprement cette application. Toutes les sessions avec MySQL(connection, statement, resultsets) doivent être fermées.
Cette application est terminée en fermant la fenêtre. Nous devrions donc rajouter une méthode traitant l'évènement WindowClosing.
Sélectionnez "JFrame" dans la fenêtre Inspector pour voir ses propriétés, et cliquez ensuite sur "events" pour changer de page. Trouvez l'évènement "windowClosing". Il est mis par défaut sur <none>, mais lorsque vous cliquez sur le mot <none>, il devrait être modifié automatiquement en "formWindowClosing"...Pressez la touche d'Entrée lorsque cette ligne est sélectionnée.

Définir évênement windowClosing de la JFrame

Ensuite, le code source apparaît pour permettre l'édition de la méthode.

Editez la méthode "formWindowClosing"

Fermer la statement et la connection.

L'autre chose est de définir les éléments de la JComboBox nommée typeCombo. Oui, il devrait être équipé pour sélectionner le type de conduite d'une voiture.

Sélectionnez le noeud "typeCombo" dans la fenêtre Inspector pour montrer ses propriétés. Trouvez la propriété "model" et cliquez sur le bouton "..." situé à l'extrême droite, juste comme nous l'avons fait pour définir le Modèle de Table pour la JTable.
Une fenêtre apparaît. Cette fois nous utilisons le ComboBoxModelEditor sélectionné par défaut.

Introduisez un nouvel élément dans le champ "Item:" et cliquez sur le bouton "Add". C'est facile! J'ai préparé les éléments "FF", "FR", "MR" et"4WD" comme type de conduite. Y en a-t-il d'autres?

Insertion de Données dans MySQL

La dernière ligne droite! L'insertion des données dans MySQL devrait se faire lorsqu'on presse le bouton "Send" (le JButton nommé "sendButton").

Dans l'Editeur Visuel de NetBeans, il est très facile de créer une méthode traitant un évènement d'un JButton. Il suffit de cliquez deux fois sur le JButton lui-même dans la Form.

La méthode "sendButtonActionPerformed" est créée dans le fichier source. Codons maintenant son contenu:

private void sendButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendButtonActionPerformed
        // TODO add your handling code here:
        String carid=idField.getText();
        String name=nameField.getText();        
        String vendor=vendorField.getText();
        String type=(String)typeCombo.getSelectedItem();
        String insertStr="";
        try{
            insertStr="insert into cars (carid, name, vendor, type) values("
                    +quotate(carid)+","
                    +quotate(name)+","
                    +quotate(vendor)+","
                    +quotate(type)
                    +")";
            int done=stmt.executeUpdate(insertStr);
            commentLabel.setText("1 row inserted");
            getContentPane().removeAll();
            initComponents();
        }
        catch(Exception e){
            commentLabel.setText("Error occurred in inserting data");
            e.printStackTrace();
        }
    }//GEN-LAST:event_sendButtonActionPerformed

Notez que la méthode initComponents est appelée après avoir insérer des données, et après removing the current content pane. Il est nécessaire de rafraichir l'apparence de la JTable. Si j'avais été plus malin, je ne devrais raffraichir que la JTable, au lieu de tout le conteneur. C'est, comme on dit en Japonais un peu comme "Chopping tofu with the axe". Désolé!

Also note here the quotate method is called. I created it not to hit so many quotation marks:

 
public String quotate(String content){

return "'"+content+"'";
}

Voici tout le code pour InsertTable.java.

Exécutez le projet! Introduisez des données et cliquez sur le bouton "Send". Maintenant, vous pouvez voir une autre ligne insérée dans la JTable. Insérez-en quelques autres!

Operating the completed application

...Et assurons nous également que ces données sont bien vues par l'utilitaire de NetBeans.

Dur travail! Mais durant cet exercice nous avons appris:

  • Comment How to operate database from NetBeans's utility
  • Comment éditer le code "protégé" dans les zones bleu-claires
  • Comment utiliser un Modèle de Table personnalisé pour la JTable

...etc.

 

Project Features

About this Project

fr was started in November 2009, is owned by petras, and has 20 members.
By use of this website, you agree to the NetBeans Policies and Terms of Use (revision 20140418.2d69abc). © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo
 
 
Close
loading
Please Confirm
Close