Architecture de l'API JDBC
JDBC (Java Database Connectivity) est une API standard de Java qui permet d'interagir avec des systèmes de gestion de bases de données relationnelles (SGBDR). Elle repose sur un ensemble d'interfaces et de classes situées principalement dans le package java.sql.
| Composant | Type | Rôle principal |
|---|---|---|
DriverManager |
Classe | Gère la liste des pilotes de base de données et établit la connexion via une URL spécifique. |
Connection |
Interface | Représente une session physique avec la base de données. |
Statement |
Interface | Permet d'acheminer des requêtes SQL statiques vers la base de données. |
ResultSet |
Interface | Stocke les données extraites de la base après une requête de sélection (SELECT). |
SQLException |
Classe | Gère les erreurs liées à l'accès aux données ou à la syntaxe SQL. |
Configuration de l'environnement
Pour utiliser JDBC avec un moteur spécifique comme MySQL, il est nécessaire d'intégrer le pilote (Driver) au projet :
- Télécharger le fichier JAR du connecteur (ex:
mysql-connector-java.jar). - Créer un répertoire
libà la racine du projet et y placer le fichier. - Ajouter le JAR au "Build Path" ou aux bibliothèques du projet dans votre IDE.
Processus de développement JDBC
1. Chargement du pilote
Cette étape enregistre la classe du pilote auprès du DriverManager afin qu'il puisse identifier le protocole de connexion.
Class.forName("com.mysql.cj.jdbc.Driver");
2. Établissement de la connexion
On définit les paramètres d'accès : l'URL JDBC, l'identifiant et le mot de passe.
String dbUrl = "jdbc:mysql://localhost:3306/gestion_stock";
String user = "admin";
String pass = "secret123";
Connection cnx = DriverManager.getConnection(dbUrl, user, pass);
3. Création de l'objet de commande
L'interface Statement est utilisée pour envoyer des instructions SQL.
Statement instruction = cnx.createStatement();
4. Exécution de la requête SQL
Selon le type de requête, on utilise différentes méthodes :
executeUpdate(): Pour INSERT, UPDATE, DELETE (renvoie le nombre de lignes modifiées).executeQuery(): Pour les requêtes SELECT (renvoie un objetResultSet).
String sqlInsert = "INSERT INTO articles (code, designation, prix) VALUES ('A01', 'Ecran LED', 150.00)";
int lignesImpactees = instruction.executeUpdate(sqlInsert);
if (lignesImpactees > 0) {
System.out.println("Insertion réussie.");
}
5. Fermeture des ressources
Il est impératif de libérer les resources dans l'ordre inverse de leur ouverture.
instruction.close();
cnx.close();
Exploitation des résultats avec ResultSet
L'objet ResultSet maintient un curseur pointant sur la ligne actuelle des données.
String query = "SELECT id_user, nom_complet, email FROM utilisateurs";
ResultSet rs = instruction.executeQuery(query);
while (rs.next()) {
// Extraction par index de colonne (commence à 1)
int id = rs.getInt(1);
// Extraction par nom de colonne
String nom = rs.getString("nom_complet");
String mail = rs.getString("email");
System.out.println("ID: " + id + " | Nom: " + nom + " | Mail: " + mail);
}
Gestion des erreurs courantes
Lors du développement JDBC, plusieurs exceptions peuvent survenir :
- ClassNotFoundException : Le fichier JAR du pilote est manquant ou le nom de la classe est incorrect.
- SQLException : Erreur de syntaxe SQL, paramètres de connexion invalides ou violation de contrainte (ex: clé primaire dupliquée).
- MySQLSyntaxErrorException : Souvent causée par l'oubli de guillemets simples autour des valeurs de type String dans la requête SQL.