This week's giveaway is in the Android forum.
We're giving away four copies of Android Security Essentials Live Lessons and have Godfrey Nolan on-line!
See this thread for details.
The moose likes JDBC and the fly likes DriverManager lookup Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Databases » JDBC
Bookmark "DriverManager lookup" Watch "DriverManager lookup" New topic

DriverManager lookup

Neelima Mohan

Joined: May 23, 2010
Posts: 27

Why should we load the DriverManager explicitly in the JDBC code using Class.forName()?
Why can't it be included in the classpath and let the classloader load it? The approach could even have been like have the jar file like ojdbc14.jar in the classpath.
Why is the apporach to the loading of DriverManager so different from how we otherwise instantiate the other classes?

Ernest Friedman-Hill
author and iconoclast

Joined: Jul 08, 2003
Posts: 24183

To be clear: you don't load the DriverManager (a class in the JDBC package), but rather, you load the JDBC driver for a given database.

The reason you do this is that the java.sql package is a set of interfaces, and you write all your code to those interfaces. A driver is a set of classes that implement those interfaces and let you talk to a specific database. Often, the classes in that driver aren't even public classes, so you can't use their names directly. Instead, you can load the driver, which registers itself with the DriverManager, which allows your application to get a Connection to that particular brand of database. In theory, if you change just the String containing the name of the driver class, you can load a different driver, connect to a different brand of database, and all of the rest of your code can remain exactly the same. Now, in most real applications, the name of the driver class is read from a configuration file, not hardcoded into the application. This means that by editing a text file, you can configure your applciation to use Oracle, or MySQL, or MS-SQL, without changing the code at all!

[Jess in Action][AskingGoodQuestions]
David Newton

Joined: Sep 29, 2008
Posts: 12617

Neelima Mohan wrote:Why is the apporach to the loading of DriverManager so different from how we otherwise instantiate the other classes?

It isn't, necessarily, depending on how your applications are encoded. Think of it as a form of dependency injection, except rather than injecting the actual implementation, you're "injecting" the string name of the class to use.
Rob Spoor

Joined: Oct 27, 2005
Posts: 19655

Moving to JDBC.

How To Ask Questions How To Answer Questions
I agree. Here's the link:
subject: DriverManager lookup
Similar Threads
load and register driver
Querying class information
need help on dynamic loading of jdbc driver
Data from Oracle