Java Database Connectivity (JDBC) - Langage SQL
Chapitres traités Principe de base
Ce chapitre traite essentiellement de la relation entre Java et les bases de données. Dans cette étude, je m'intéresse à l'écriture standard
de tout programme Java gérant les bases de données quelque soit l'environnement de développement intégré utilisé. Si vous désirez
utiliser des objets spécialisés par rapport à JBuilder, toute une série d'études leurs sont consacrées.
Pour en savoir plus sur l'environnement de JBuilder avec les objets relatifs aux bases de données.
Principe de base
Les systèmes de base de données non seulement assure le traitement des fichiers, mais en plus organisent les données de manière à faciliter l'obtention des résultats d'une
requête complexe. Les bases de données les plus courantes dans les ordinateurs qui utilisent Java sont les bases de données relationnelles.
Langage SQL
L'un des principaux obstacles auxquels les programmeurs de bases de données doivent faire face est la grande diversité des formats de bases de données
employés actuellement. Chaque serveur de bases de données utilise en fait ses propres techniques, qualifiées de "propriétaires", pour accéder aux données. Afin
de simplifier l'utilisation des serveurs de bases de données relationnelles, un langage standard appelé SQL (Structured Query Langage, ou langage de requêtes
structuré) a été inventé. Ce langage permet de ne pas avoir à apprendre différents langages de requêtes de bases de données pour les divers formats de bases de
données.
Dans le domaine de la programmation de bases de données, l'opération consistant à demander des enregistrements stockés dans une base de données est appelé
requête. SQL permet d'envoyer des requêtes complexes à une base de données et d'obtenir les enregistrements demandés, dans l'ordre choisi.
Le programmeur pourra, par exemple, créer une requête demandant de fournir les enregistrements pour lesquels le dernier paiement date de plus de 180 jours et
pour lesquels le montant est supérieur 100 €.SQL peut également servir à contrôler l'ordre dans lequel les enregistrements sont affichés. Le programmeur
peut, par exemple, demander qu'apparaisse d'abord le numéro de Sécurité sociale, puis le nom du bénéficiaire du prêt, le montant dû, etc.
SQL permet d'accomplir toutes ces opérations sans même avoir à apprendre le langage de requête spécifique à la base de données utilisée.
La plupart des formats de bases de données offrent un haut degré de compatibilité avec SQL. En théorie, vous devriez donc pouvoir utiliser les mêmes commandes
SQL pour tous les systèmes de gestion de bases de données compatibles avec ce langage. SQL constitue l'approche standard qu'on choisi les éditeurs de logiciels
en matière d'accès aux bases de données relationnelles. Parmi les logiciels de bases de données relationnelles les plus connus, mentionnons Microsoft Acces,
Sybase, Oracle, Informix, Microsoft SQL Server, MySQL, etc.
Les principales commandes du langage SQL sont spécifiées à la fin de cette étude.
.
Connexion à une base de données - JDBC
Java permet donc aux programmeurs d'écrire du code qui met en oeuvre les requêtes SQL pour retrouver des renseignements dans des bases de données
relationnelles, mais ce n'est pas tout. Le langage Java est un langage universel qui, par essence, peut fonctionner sur différentes plate-formes. De plus, il faut que
le programme puisse se connecter avec n'importe quel serveur de base de données utilisée dans le commerce. Java doit donc disposer d'un système de connexion
polivalent.
La technologie de connectivité de bases de données Java, appelé JDBC (Java Database Connectivity), est une bibliothèque de classes (et surtout d'interfaces) qui
permet de travailler avec différents serveurs de bases de données relationnelles. Une fois que la connexion est établie, les interfaces prévues par la JDBC permettent
d'obtenir tous les renseignements cessaires en utilisant tout simplement le langage de requête SQL.
Malheureusement, il y a un "hic" : avant de pouvoir utiliser la bibliothèque de classes JDBC, vous devez configurer une source de données de telle sorte que Java
puisse y accéder. Pour cela, vous devez récupérer ce que l'on appelle un pilote correspondant à la base de données relationnelle utilisée. La plupart des fabricants
propose de tels pilotes, pour que l'on puisse effectivement se connecter à leur base de données depuis Java.
Pilotes de bases de données
Les programmes Java qui utilisent les interfaces et les classes JDBC peuvent suivre le modèle de
programmation traditionnel, qui consiste à formuler des instructions SQL puis à traiter les données qui en
résultent. Le format de la base de données et de la plate-forme pour laquelle elle a été conçue n'ont pas
d'importance.
L'indépendance vis-à-vis de la plate-forme et du format de base de données est assurée par un gestionnaire de
pilotes. Les classes de la bibliothèque JDBC sont en effet largement dépendantes de gestionnaires de pilotes,
qui permettent de savoir quels pilotes sont nécessaires pour accéder aux enregistrements d'une base de
données. Chaque format de base de données utilisé dans un programme nécessite un pilote différent.
Les pilotes de bases de données JDBC sont, la plupart du temps, écrits complètement en Java. L'ensemble du
pilote correspond à une bibliothèque (*.jar) et la classe de connexion porte souvent le nom de Driver.
Utilisation d'une base de données en Java
La bibliothèque de classes de JDBC inclut des classes adaptées à chacune des tâches généralement associées aux bases de données. Elle permet en gros de faire
trois choses :
1. D'établir une connexion avec une base de données en adéquation avec le pilote choisi.
2. D'exécuter une requête SQL sur la base de données connectée.
3. De visualiser les enregistrements résultant de la requête.
Base de données MySQL et configuration de JBuilder
Dans cette leçon, nous allons mettre en oeuvre notre première base de données. Les exemples proposé seront simple, le but étant de comprendre tous les mécanismes qui
sont en jeu. Le serveur de base de données que j'ai choisi est MySQL, mais il est bien entendu possible d'en choisir un autre, le principe de connexion restant identique.
Il va être nécessaire de régler JBuilder pour qu'il soit capable de se connecter au serveur de base de données MySQL, ce qu'il ne sait pas faire à priori. D'après ce
que nous avons étudié au préalable, la connexion ne s'effectue qu'au travers d'un pilote qui doit être récupéré soit par le fournisseur du serveur de base de
données, soit éventuellement par l'intermédiaire d'Internet.
Récupération du pilote
Le nom du pilote correspondant au serveur MySQL est de la forme MySQL Connector/J (version). Vous avez, bien entendu, la version pour Linux (tar.gz) et la
version pour Windows (zip).
Actuellement, celui que j'utilise s'appelle plus précisément MySQL Connector/J 3.1 . Sur le site, d'autres versions vous sont proposées. Prenez la dernière version
stable.
Dernière version stable d’un pilote JDBC pour MySQL : http://dev.mysql.com/downloads/
Placement de la librairie représentant l'ensemble des classes du pilote avec les librairies de JBuilder
N'oubliez pas qu'un pilote est constitué d'un ensemble de classes Java qui sont localisées au sein d'une bibliothèque (jar). La première démarche, après avoir
récupéré ce fichier compressé, va être d'extraire cette bibliothèque et de la placer à un endroit convenable.
Le fichier que vous venez de récupérer comporte beaucoup plus que la bibliothèque, et il est relativement conséquent.
.
Il ne nous reste maintenant plus qu'à configurer JBuilder pour qu'il reconnaisse cette bibliothèque afin de pouvoir l'intégrer dans les applications gérant les bases
de données (pour une connexion avec MySQL, bien entendu).
Souvenez-vous qu'il est possible que ce pilote (cette bibliothèque) soit automatiquement intégré à chaque projet en réglant Propriété du projet par défaut..., qui se
trouve dans le menu Projet”. Je n'appliquerais pas cette démarche, parce que tous les projets n'utilisent pas systématiquement les bases de données.
Connexion à une base de données
Puisque tout est correctement installé, nous allons voir comment se connecter à une base de données. Cette connexion s'effectue en deux étapes :
1. Il faut d'abord charger le bon pilote JDBC en mémoire afin que l'interconnexion avec le serveur de base de données puisse se réaliser correctement.
2. Une fois que la communication avec le serveur de base de données est possible, il faut ensuite se connecter avec la base de données à traiter.
Toutes les classes que nous utilisons pour gérer les bases de données nécessite d'importer la paquetage <java.sql>.
import java.sql.*;
Base de données gestion avec une seule table personne
Pour tester nos premières requêtes, nous allons constituer une base de données avec une seule table dont voici la définition :
Voici le contenu de la table
Chargement de la classe Driver représentant le pilote de la base de données MySql
Avant tout, nous devons charger en mémoire le pilote que nous souhaitons utiliser pour établir la connexion. Le pilote est représenté par une classe (elle s'appelle
toujours Driver - pilote en anglais) et c'est la Machine Virtuelle Java qui s'occupe de son chargement. Cette classe implémente l'interface java.sql.Driver et peut
être chargée en appelant la méthode de classe forName de la classe java.lang.Class :
Class.forName("com.mysql.jdbc.Driver"); ou Class.forName("org.gjt.mm.mysql.Driver");
Class.forName(String): signifie faire construire par la JVM un objet Class contenant toutes les interfaces du programme choisi.
.
Ce chargement manuel est intéressant. Il devient très facile de changer de logiciel de base de données. Seule cette ligne est à modifier. Il suffit de changer le nom du
nouveau pilote représentant le nouveau serveur de base de données. Avec cette technique, il est me possible d'utiliser plusieurs serveur de bases de données
dans le même programme.
Plus précisément, ce chargement consiste à compléter l'attribut drivers de la classe utilitaire java.sql.DriverManager. Cet attribut est en réalité un vecteur qui
permet d'envisager de stocker effectivement plusieurs pilotes et donc de gérer plusieurs serveur de base de données pour une même application Java. Cette classe
DriverManager est vraiment prépondérante, puisque c'est elle qui s'occupe de la gestion des serveurs utilisés et qui permet indirectement d'établir la
communication entre le programme Java et la (ou les) bases de données.
En réalité, La JDBC est essentiellement composée d'interfaces qui représentent les classes effectives délivrées par la bibliothèque du pilote. Chacune de ces classes
porte le même nom que l'interface. La classe DriverManager met juste en relation ces interfaces avec les bonnes classes qui constitue le pilote afin que la
communication s'effectue bien sur le bon serveur de base de données. Le programme Java lui ne communique avec la base de données qu'au travers de ces
interfaces. Ainsi, grâce à ce système, le programme Java peut s'exécuter avec n'importe quel serveur de base de données. Il suffit juste de récupérer le pilote adapté.
Connexion à la base de données avec le couple java.sql.DriverManager et java.sql.Connection
Toute l'infrastructure est prête. Nous pouvons maintenant établir la connexion avec la base de données que nous devons traiter. Nous venons de le voir, le pilote
dispose d'un certain nombre d'interface. L'une de ces interfaces disponibles nous sert à établir la connexion avec la base de données ; Il s'agit de
java.sql.Connection. C'est une interface spécialisée pour les bases de données et propose de nombreux services.
L'objet de type Connection est capable de nous permettre de décrire :
1. les tables de la base,
2. la version SQL qu'elle supporte,
3. ses procédures stockées,
4. ses capacités de connexion, etc.
Par défaut, Connection est en mode auto-commit, c'est-à-dire que chaque changement dans la base est effectivement enregistré après l'exécution de chaque requête.
Pour que cet objet soit correctement initialisé, il est nécessaire de faire appel au service permettant de gérer les pilotes JDBC à l'aide de la classe DriverManager,
que nous venons de voir plus haut, et d'effectuer la connexion proprement dite grâce à la méthode de classe getConnection(String).
Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/gestion?user=root&password=manu");
Examinons chacun des termes de cette instruction. La méthode getConnection est appelée :
1. via la classe DriverManager. Cette dernière regroupe toutes les méthodes permettant la détection des pilotes appropriés pour établir une connexion.
2. demande qu'on lui indique en paramètre où se trouve la base de données, ainsi que le nom d'utilisateur et son mot de passe. Cette information est stockée sous la
forme d'une chaîne de caractères qui correspond à l'URL JDBC.
Lorsque la connexion est enfin réalisée, la méthode getConnection() retourne en résultat un objet de la classe qui implémente l'interface java.sql.Connection. Cet
objet est essentiel, puisque c'est ensuite à travers lui que va s'effectuer la communication entre votre programme Java et la base de donnée MySql (par exemple).
Construction de l'URL JDBC
Pour établir une connexion, il est nécessaire d'indiquer les informations telles que le protocole utilisé, le lieu se trouve la base de données, le nom d'utilisateur
et son mot de passe. Le protocole ainsi que le lieu se trouve la base de données s'écrivent sous la forme d'une URL, appelée communément URL JDBC. Elle
s'écrit comme suit :
"jdbc:mysql://" + nomHôte + " : " + port + " / " + nomDeLaBase + "?user=" + utilisateur + "&password=" + motDePasse
où :
1. nomHôte : est une variable de type String qui contient soit le nom réseau de la machine hébergeant la base de données, soit l'adresse IP de cette machine.
2. port : est une variable de type String qui contient le numéro du port correspondant au service de la base de données. Si vous ne changer pas de numéro de
service, cette variable peut être ommise. Le numéro du service correspondant au serveur MySql est 3306 par défaut.
3. nomDeLaBase : est une variable de type String qui contient le nom de la base de données à traiter sur le serveur MySql.
4. utilisateur : correspond au nom du compte de l'utilisateur désirant travailler sur la base de données.
5. motDePasse : correspond au mot de passe associé au compte utilisateur.
Le nom d'utilisateur ainsi que son mot de passe sont nécessaires à la mise en place d'une connexion. En effet, il existe différents types d'utilisateurs allant du simple
consultant à l'administrateur en passant par le gestionnaire. Pour distinguer chaque utilisateur et déterminer son droit d'accès, l'administrateur de la base crée des
comptes utilisateurs caractérisés par un login et un mot de passe.
Nous disposons aussi de la méthode getConnection avec deux paramètres supplémentaires représentant respectivement un utilisateur référencé par
l'administrateur de la base de données et son mot de passe. Cette deuxième méthode permet de bien séparer l'utilisateur de la localisation de la base de données.
Par ailleurs, la syntaxe s'en trouve simplifiée. Personnellement, je préfère cette deuxième approche.
Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/gestion","root","manu");
Utiliser une connexion JDBC (java.sql.Connection)
Nous venons de le voir, la connexion renvoyée par la méthode getConnection de la classe java.sql.DriverManager est l'objet qui est principalement utilisé pour
effectuer des opérations sur la base de données. La classe de cet objet implémente l'interface java.sql.Connection dont voici les principales méthodes :
createStatement : cette méthode renvoie une instance de java.sql.Statement utilisée ensuite pour exécuter une requête SQL sur la base de données. C'est très
souvent cette méthode qui est utilisée pour établir une communication directe avec la base de données afin de la modifier, ou tout simplement pour la consulter.
prepareStatement : quelque fois, il est préférable de préparer des requêtes afin de pouvoir ultérieurement leur affecter des variables et des données de manière
dynamique. Il existe une instance de java.sql.PreparedStatement délivrée par la méthode prepareStatement qui permet de précompiler les instructions SQL
paramétrées.
prepareCall : cette méthode prépare l'appel aux procédures stockées de la base de données et renvoie une instance de java.sql.CallableStatement.
setAutoCommit, commit, rollback : gèrent les transactions sur la base de données.
getMetaData : cette méthode renvoie une instance de java.sql.DatabaseMetaData pour obtenir des informations sur la base de données et sur ses possibilités.
close et isClosed : gèrent la fermeture d'une connexion.
Consulter ou modifier une base de données (java.sql.Statement)
Une fois que la connexion est établie, nous pouvons effectuer toutes les requêtes nécessaires afin d'exploiter au mieux l'ensemble des tables qui constitue cette base de
données. Il suffit simplement de proposer les requêtes prévues par le langage SQL.
1 / 15 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !