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?
Class class to load the JDBC drivers directly. For example: Class. forName ("oracle. jdbc.
You must register the driver in your program before you use it. Registering the driver is the process by which the Oracle driver's class file is loaded into the memory, so it can be utilized as an implementation of the JDBC interfaces.
Driver is loaded with the following statement: Class. forName("my. sql. Driver"); When getConnection is called the DriverManager will attempt to locate a suitable driver from amongst those loaded at initialization and those loaded explicitly using the same classloader as the current applet or application.
The Class#forName()
runs the static initializers (you know, static
applies to the class, not to the instance). The JDBC driver implementation should register itself in the static initializer.
public class SomeDriver implements Driver {
static {
DriverManager.registerDriver(new SomeDriver());
}
}
Note that there exist buggy JDBC drivers such as org.gjt.mm.mysql.Driver
which incorrectly registers itself inside the constructor instead. That's why you need a newInstance()
call afterwards on such drivers to get them to register themselves.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With