Mysql
 sql >> Database >  >> RDS >> Mysql

Perché la chiamata a Class.forName(com.mysql.jdbc.Driver) registra MySQL per JDBC?

Lo registra perché carica la classe in memoria ed esegue gli inizializzatori statici della classe. Il codice di inizializzazione statico chiama quindi il framework JDBC per dire "Ciao, sono un driver JDBC" (chiamando DriverManager.registerDriver ).

Ad esempio, la classe del conducente apparirà vagamente così:

package com.example.jdbc;

import java.sql.DriverManager;

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

    // ...implementation...
}

Quindi, quando esegui Class.forName("com.example.jdbc.Driver") , carica la classe ed esegue l'inizializzatore statico, che crea un'istanza e la registra con DriverManager .

Devo notare che come dice Andreas , i moderni driver JDBC non hanno bisogno che tu lo faccia.