Connexion à une base de données via JDBC

Implémentation de l'interface Driver

L'interface java.sql.Driver est implémentée par tous les pilotes JDBC. Les fournisseurs de bases de données founrissent des implémentations spécifiques :

  • MySQL : com.mysql.cj.jdbc.Driver
  • Oracle : oracle.jdbc.OracleDriver

Chargement du pilote JDBC

Utilisez Class.forName() pour charger dynamiquement le pilote :

Class.forName("com.mysql.cj.jdbc.Driver");

L'enregistrement auprès de DriverManager s'effectue automatiquement via un bloc statique dans la classe du pilote.

Format des URL JDBC

Structure standard : jdbc:sous-protocol:sous-nom

Base de données Format d'URL
MySQL jdbc:mysql://serveur:3306/base?param=valeur
Oracle jdbc:oracle:thin:@serveur:1521:SID
SQL Server jdbc:sqlserver://serveur:1433;databaseName=base

Méthodes de connexion

Initialisation directe

@Test
public void connexionDirecte() {
    try {
        ConnexionMySQL pilote = new ConnexionMySQL();
        String url = "jdbc:mysql://localhost:3306/base";
        Properties auth = new Properties();
        auth.put("user", "admin");
        auth.put("password", "secret");
        
        Connection lien = pilote.connecter(url, auth);
    } catch (SQLException e) { e.printStackTrace(); }
}

Réflexion avec instanciation

@Test
public void connexionReflexion() {
    try {
        Class piloteClasse = Class.forName("com.mysql.cj.jdbc.Driver");
        Connexeur pilote = (Connexeur) piloteClasse.newInstance();
        
        Properties auth = new Properties();
        auth.setProperty("user", "admin");
        // ... (connexion similaire)
    } catch (Exception e) { e.printStackTrace(); }
}

Utilisation de DriverManager

@Test
public void viaDriverManager() {
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        DriverManager.enregisterDriver(new ConnexionMySQL());
        
        Connection lien = DriverManager.obtenirConnexion(
            "jdbc:mysql://localhost:3306/base", "admin", "secret");
    } catch (Exception e) { e.printStackTrace(); }
}

Chargement automatique

@Test
public void chargementAuto() {
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection lien = DriverManager.obtenirConnexion(
            "jdbc:mysql://localhost:3306/base", "admin", "secret");
    } catch (Exception e) { e.printStackTrace(); }
}

Configuration externe

@Test
public void avecConfiguration() throws Exception {
    InputStream config = getClass().getClassLoader()
        .getResourceAsStream("db.conf");
    Properties props = new Properties();
    props.load(config);
    
    Class.forName(props.getProperty("pilote"));
    Connection lien = DriverManager.obtenirConnexion(
        props.getProperty("url"), 
        props.getProperty("utilisateur"), 
        props.getProperty("motdepasse"));
}

Exemple de fichier db.conf :

utilisateur=admin
motdepasse=secret
url=jdbc:mysql://localhost:3306/base
pilote=com.mysql.cj.jdbc.Driver

Étiquettes: JDBC DriverManager MySQL Oracle SQLServer

Publié le 8 juillet à 04h28