Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi l'appel de Class.forName(com.mysql.jdbc.Driver) enregistre-t-il MySQL pour JDBC ?

Il l'enregistre car il charge la classe en mémoire et exécute les initialiseurs statiques de la classe. Le code d'initialisation statique appelle ensuite le framework JDBC pour dire "Bonjour, je suis un pilote JDBC" (en appelant DriverManager.registerDriver ).

Par exemple, la classe de pilote apparaîtra vaguement comme ceci :

package com.example.jdbc;

import java.sql.DriverManager;

public class Driver implements java.sql.Driver {
    static {
        DriverManager.registerDriver(new Driver());
    }

    // ...implementation...
}

Ensuite, lorsque vous faites Class.forName("com.example.jdbc.Driver") , il charge la classe et exécute l'initialiseur statique, qui crée une instance et l'enregistre avec le DriverManager .

Je dois noter que comme le dit Andreas , les pilotes JDBC modernes n'ont pas besoin de vous pour cela.