DatabaseConnection
package com.example.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnection {
private String jdbcURL;
private String jdbcUsername;
private String jdbcPassword;
private Connection jdbcConnection;
public DatabaseConnection(String jdbcURL, String jdbcUsername, String jdbcPassword) {
this.jdbcURL = jdbcURL;
this.jdbcUsername = jdbcUsername;
this.jdbcPassword = jdbcPassword;
}
public void connect() throws SQLException {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new SQLException("MySQL JDBC Driver not found.", e);
}
jdbcConnection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);
}
public void disconnect() throws SQLException {
if (jdbcConnection != null && !jdbcConnection.isClosed()) {
jdbcConnection.close();
}
}
public Connection getJdbcConnection() {
return jdbcConnection;
}
}
Structure de la Classe DatabaseConnection
-
Attributs de la Classe :
jdbcURL: Chaîne de caractères contenant l'URL JDBC pour se connecter à la base de données.jdbcUsername: Nom d'utilisateur pour l'authentification à la base de données.jdbcPassword: Mot de passe pour l'authentification à la base de données.jdbcConnection: Instance deConnection, gérant la connexion réelle à la base de données.
-
Constructeur :
- Le constructeur prend l'URL, le nom d'utilisateur et le mot de passe JDBC et les initialise. Ces informations sont essentielles pour établir une connexion avec la base de données.
-
Méthode
connect():- Chargement du Pilote JDBC : La ligne
Class.forName("com.mysql.cj.jdbc.Driver");charge le pilote JDBC de MySQL en mémoire. Cela est nécessaire pour que Java puisse communiquer avec la base de données MySQL. - Établissement de la Connexion :
DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword)établit la connexion à la base de données en utilisant l'URL, le nom d'utilisateur et le mot de passe fournis. Cette connexion est stockée dansjdbcConnection. - Gestion des Exceptions : Si le pilote JDBC n'est pas trouvé (
ClassNotFoundException), une exceptionSQLExceptionest lancée avec un message approprié.
- Chargement du Pilote JDBC : La ligne
-
Méthode
disconnect():- Cette méthode vérifie si
jdbcConnectionn'est pasnullet si la connexion est toujours ouverte (!jdbcConnection.isClosed()). Si c'est le cas, elle ferme la connexion à la base de données.
- Cette méthode vérifie si
-
Méthode
getJdbcConnection():- Retourne l'instance actuelle de
Connection(jdbcConnection), permettant ainsi à d'autres parties du code d'utiliser cette connexion pour exécuter des requêtes SQL.
- Retourne l'instance actuelle de
Utilisation dans un Projet
-
Rôle dans l'Application :
DatabaseConnectionest une classe utilitaire centrale pour gérer la connexion à une base de données MySQL. Elle est utilisée dans des classes DAO (Data Access Object) pour effectuer des opérations CRUD sur la base de données. -
Sécurité et Fiabilité : En encapsulant la logique de connexion dans une classe distincte, le code devient plus sûr (les détails de connexion sont centralisés) et plus fiable (la gestion des exceptions est cohérente).
Points Clés
- Gestion des Ressources : Illustration de la gestion des ressources en Java, notamment la connexion à une base de données.
- Patron de Conception Singleton : Bien que cette classe ne soit pas un singleton dans cet exemple, elle pourrait être modifiée pour suivre le patron de conception Singleton, garantissant une seule instance de connexion pour toute l'application.
- le Singleton est une partern pratique. Le constructeur crée une instance de sa propre class la première fois que vous appelez la class, et quand la class est appelée en suite elle renvoie toujours la même instance.
- Gestion des Exceptions : Montre comment gérer les exceptions en Java, en particulier dans un contexte de connexion à la base de données.
- JDBC et Base de Données : Exemple concret d'utilisation de JDBC pour se connecter à MySQL, pertinent pour enseigner les bases de données en Java.
Exemple Singleton:
Code Singleton pour DatabaseConnection
package com.example.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnection {
private String jdbcURL;
private String jdbcUsername;
private String jdbcPassword;
private Connection jdbcConnection;
// Instance unique statique privée
private static DatabaseConnection instance;
// Constructeur privé
private DatabaseConnection(String jdbcURL, String jdbcUsername, String jdbcPassword) {
this.jdbcURL = jdbcURL;
this.jdbcUsername = jdbcUsername;
this.jdbcPassword = jdbcPassword;
}
// Méthode publique statique pour obtenir l'instance
public static DatabaseConnection getInstance(String jdbcURL, String jdbcUsername, String jdbcPassword) {
if (instance == null) {
instance = new DatabaseConnection(jdbcURL, jdbcUsername, jdbcPassword);
}
return instance;
}
public void connect() throws SQLException {
if (jdbcConnection == null || jdbcConnection.isClosed()) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
jdbcConnection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);
} catch (ClassNotFoundException e) {
throw new SQLException("MySQL JDBC Driver not found.", e);
}
}
}
public void disconnect() throws SQLException {
if (jdbcConnection != null && !jdbcConnection.isClosed()) {
jdbcConnection.close();
}
}
public Connection getJdbcConnection() {
return jdbcConnection;
}
}
Points Clés du Singleton
- Instance Unique : L'instance unique de
DatabaseConnectionest stockée dans une variable statique privéeinstance. - Constructeur Privé : Le constructeur est privé pour empêcher la création d'instances de l'extérieur de la classe.
- Accès à l'Instance : La méthode
getInstanceest la seule manière d'accéder à l'instance unique. Elle crée l'instance si elle n'existe pas et retourne toujours la même instance. - Gestion de la Connexion : Les méthodes
connectetdisconnectassurent que la connexion est correctement gérée (ouverture et fermeture) pour l'unique instance de la classe.
Utilisation dans le Code
Pour utiliser cette classe dans votre application, vous devez appeler DatabaseConnection.getInstance(jdbcURL, jdbcUsername, jdbcPassword) chaque fois que vous avez besoin de la connexion à la base de données. Cela garantit que toutes les parties de votre application partagent la même instance de connexion.
Exercices (falcultatif)
Essayez de modifer votre code pour intégrer la version Singleton de DatabaseConnection