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

  1. 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 de Connection, gérant la connexion réelle à la base de données.
  2. 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.
  3. 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 dans jdbcConnection.
    • Gestion des Exceptions : Si le pilote JDBC n'est pas trouvé (ClassNotFoundException), une exception SQLException est lancée avec un message approprié.
  4. Méthode disconnect() :

    • Cette méthode vérifie si jdbcConnection n'est pas null et si la connexion est toujours ouverte (!jdbcConnection.isClosed()). Si c'est le cas, elle ferme la connexion à la base de données.
  5. 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.

Utilisation dans un Projet

  • Rôle dans l'Application : DatabaseConnection est 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

  1. Instance Unique : L'instance unique de DatabaseConnection est stockée dans une variable statique privée instance.
  2. Constructeur Privé : Le constructeur est privé pour empêcher la création d'instances de l'extérieur de la classe.
  3. Accès à l'Instance : La méthode getInstance est 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.
  4. Gestion de la Connexion : Les méthodes connect et disconnect assurent 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

Modifié le: mercredi 22 novembre 2023, 05:32