Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum registriert der Aufruf von Class.forName(com.mysql.jdbc.Driver) MySQL für JDBC?

Es registriert es, weil es die Klasse in den Speicher lädt und die statischen Initialisierer der Klasse ausführt. Der statische Initialisierungscode ruft dann das JDBC-Framework auf, um zu sagen:„Hallo, ich bin ein JDBC-Treiber“ (durch Aufrufen von DriverManager.registerDriver ).

Beispielsweise sieht die Fahrerklasse vage aus so:

package com.example.jdbc;

import java.sql.DriverManager;

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

    // ...implementation...
}

Wenn Sie dann Class.forName("com.example.jdbc.Driver") ausführen , lädt es die Klasse und führt den statischen Initialisierer aus, der eine Instanz erstellt und beim DriverManager registriert .

Ich sollte beachten, dass wie Andreas sagt , brauchen Sie dies bei modernen JDBC-Treibern nicht.