In JDBC, to connect and execute statements in DB we mainly
make use of Connection,Statement and ResultSet which are
interfaces. But their corresponding o!ects is later used to run methods like createStatement"#,execute$uery"#,next"# etc.%hich class implements these methods& %hy it is called as connection o!ect instead of implemented class o!ect& In JDBC you first register a dri'er y calling Class.forName('classname') which loads the Dataase class and registers that class with DriverManager %hen you say DriverManager.getConnection(# ( It returns you java.sql.Connection "the contract as per specification# %hich class implements these methods& )he actual implementation is pro'ided y the dataase 'endor, for e.g. *racle, +yS$,. %hy it is called as connection o!ect instead of implemented class o!ect& Because you code to Interface and not implementation "good coding practice#. If you want you can look up in the 'endor !ar and find which class implements Connection then instead of Connection connection = DriverManager.getConnection() you can write VendorConnectionImpl vendorConnection = (VendorConnectionImpl)DriverManager.getConnection() )his ao'e will work ut then it will ind you with that specific implementation. If you want to mo'e from 'endor- to 'endor. you cannot do that, first you will ha'e to change the ao'e code as per 'endor. /0I, But if you use the first approach you can mo'e from 1endor to 1endor without ha'ing pain of changing your code. JDBC API is mostly consisting of interfaces. So that most commonly used objects are the implementation of these interfaces. As u will see that Connection Statement PreparedStatement CallableStatement !esultSet etc. are all interfaces. So who pro"ides the implementation# $he answer is that the JDBC dri"er is what pro"ides the implementation of all these interfaces. %hen you ma&e a call as '( Dri"er)anager.getConnection*+db,rl+ +username+ +password+-. $he Dri"er)anager class chec& out with all the registered dri"ers if they recogni/e the db,rl. If any of the dri"ers recogni/s the db,rl then the Dri"er)anager uses that Dri"er class to get the Connection object. $he Connection object in this case is the implementation of the Connection interface as pro"ided by the dri"er. Similarly the implementation for all other interfaces li&e Statement !esultSet etc are pro"ided by the Dri"er. Sun pro"ides just the set of interfaces in the ja"a.s0l pac&age and any third(party people can implement it based on the spec $he +magic+ behind the way that JDBC wor&s is that you as& the Dri"er)anager for a connection using a ,!1. $heDri"er)anager gi"es you a concrete class that implements the Connection interface. 2ou then turn around and as& the concrete class that implements the Connection interface for a Statement so that concrete class returns another concrete class that implements the Statement interface. 3otice that in this whole scenario that you ne"er +new+ anything *that is you ne"er write +444 5 new 666+-. It is not the interface that 2works2 ut one of its implementations, which is specific to your particular RDB+S 'endor. In fact, it is typically the 'endor who pro'ides the implementation of the Connection interface. %hen you call Connection conn = DriverManager.getConnection( "jdc!jdc!m"sql!##local$ost!%%&'# ( connection)rops)* dri'er manager searches through registered JDBC dri'ers, finds the one for +yS$, "it knows it3s +yS$, from the connection string#, passes connection properties to the constructor of the class inside +yS$,(JDBC dri'er that implements Connection, and returns the resultant Connection instance ack to you. 4or example, the dri'er may return an instance of a package(pri'ate class M"+qlConnection that implements Connection, and your program would use it to interact with RDB+S without knowing any details aout the class, other than the fact that it implements Connection. )he Dri'er+anager does not know which is the +yS$, dri'er, it will simply 5uery each registered Dri'er and ask if that Dri'er will accept the 6R, "using accepts,-.#, the first to return true on that 5uery will e asked to create the connection. Sun "now oracle# pro'ides the spec or /0I as we call it as a set of interfaces... the 'endor takes the /0I, writes implementations for those ecause only they ha'e the clear knowledge of how to implement them for their dataase and pro'ide us the type 7 dri'er. 8ou ha'e to use the dri'er to connect to the DB and perform 'arious operations like creating connections, executing S$, statements and so on and so forth. !a'a.s5l.9 is a great example of design y interface. JDBC is a standard. It defines a set of interfaces. )hen each JDBC dri'er ( that is, a concrete implementation for a particular dataase, has to follow exactly these interfaces. )hen the dri'er registers itself in the dri'er manager "pre'iously you had to do this withClass.forName(..), and when you call DriverManager.getConnection(..), the proper dri'er is chosen ased on the passed url, and it instantiates a connection. if you output connection.getClass() you will get com.m"sql.driver.ConnectionImpl "for example#. )his means that the !dc dri'er has pro'ided an implementation of the Connection interface, ut you don3t need to e aware of the classes of each dri'er ( you only need to know the JDBC interfaces.