I am told that the prefered method to load the JDBC driver is :
Class.forName(driverName);
I understand that this is better for a dynamic decision between multiple drivers maybe read from an XML config file or user input. The thing I am curious about is how does invoking this statement loads the stated driver into the environment where we are not even storing the resultant “Class” object anywhere. The JavaDocs entry says:
public static Class forName(String className)
throws ClassNotFoundExceptionReturns
returns the Class object associated with the class or interface with the given string name
In that case, how do the Java developers managed to facilitate the existence of driver object with merely this statement?
The
Class#forName()runs the static initializers (you know,staticapplies to the class, not to the instance). The JDBC driver implementation should register itself in the static initializer.Note that there exist buggy JDBC drivers such as
org.gjt.mm.mysql.Driverwhich incorrectly registers itself inside the constructor instead. That’s why you need anewInstance()call afterwards on such drivers to get them to register themselves.