Welchen Zweck hat Klasse.forName() dienen, wenn Sie nicht mit der return-Wert?
Ich habe gesehen, diese Zeile in eine Beispiel-Anwendung für eine kommerzielle JDBC-Treiber:
Class.forName("name.of.a.jcdb.driver")
Ist der Rückgabewert nicht verwendet wird.
Welchen Sinn hat diese Linie dienen?
- Heute würde ich nenne dies ein antipattern und begünstigen so etwas wie 'DriverManager.register(JdbcDriver.class)'...
- mit direkt registrieren, müssen Sie wissen, die Treiber-Klasse, bevor die hand. ich würde sagen, dass ein anti-pattern. nachdem die Klasse als Konfigurations-Eigenschaft (und somit die Klasse.Vorname) macht weit mehr Sinn für mich.
- Siehe stackoverflow.com/q/8053095/632951 für mehr Informationen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es führt eine statische Belastung der Klasse. So etwas in der
static { }
- block ausgeführt.Vielleicht ein paar code Schnipsel helfen. Dies ist von Suns JDBC-ODBC-bridge-Treiber,
den
DriverManager.registerDriver()
nennen, die in einem static-block wird ausgeführt, wenn der Treiber geladen ist, durchClass.forName()
.Dass dies der einzige Weg, um den Treiber registrieren. JDBC 4.0 eingeführt, eine neue service-Registrierung-Mechanismus, so dass Sie nicht brauchen, um dies zu tun mehr mit neueren JDBC-4.0-kompatible Treiber.
In deinem konkreten Beispiel wird die JDBC-Treiber-Klasse enthält eine statische intializer registriert der Fahrer die DriverManager.
Dies ist insbesondere für JDBC-Treiber. Der JDBC-Treiber-Klasse hat einen statischen Initialisierer-block, registriert die Klasse des JDBC-DriverManager, so dass DriverManager kennt den Fahrer, wenn Sie später öffnen Sie eine Datenbank-Verbindung.
In einer neueren version von JDBC (JDBC 3.0, glaube ich) ist dies nicht mehr nötig, einen anderen Mechanismus verwendet wird, durch DriverManager finden Sie JDBC-Treiber.
Bearbeiten - Auf dieser Seite erklärt im detail, wie das laden eines JDBC-Treibers funktioniert und wie der Treiber registriert sich beim DriverManager (die alte Weise).
Im Falle der JDBC-Treiber der statische Initialisierer der angeforderten Klasse registriert den Treiber mit dem JDBC -DriverManager, so dass immer eine Verbindung nach einem Treiber-spezifischen URL-Werke.
zu manul laden der Klasse in der aktuellen classloader