JDBC Driver Manager
JDBC Driver Manager
The JDBC DriverManager class defines objects which can connect Java applications to a JDBC driver.
DriverManager has traditionally been the backbone of the JDBC architecture. It is quite small and simple.
This is a very important class. Its main purpose is to provide a means of managing the different types of
JDBC database driver. On running an application, it is the DriverManager's responsibility to load all the
drivers found in the system property jdbc. drivers. For example, this is where the driver for the Oracle
database may be defined. This is not to say that a new driver cannot be explicitly stated in a program at
runtime which is not included in jdbc.drivers. When opening a connection to a database it is the
DriverManager' s role to choose the most appropriate driver from the previously loaded drivers.
The JDBC API defines the Java interfaces and classes that programmers use to connect to databases and
send queries. A JDBC driver implements these interfaces and classes for a particular DBMS vendor.
A Java program that uses the JDBC API loads the specified driver for a particular DBMS before it
actually connects to a database. The JDBC DriverManager class then sends all JDBC API calls to the
loaded driver.
JDBC Driver
This topic defines the Java(TM) Database Connectivity (JDBC) driver types. Driver types are used to
categorize the technology used to connect to the database. A JDBC driver vendor uses these types to
describe how their product operates. Some JDBC driver types are better suited for some applications than
others.
This topic defines the Java(TM) Database Connectivity (JDBC) driver types. Driver types are used to
categorize the technology used to connect to the database. A JDBC driver vendor uses these types to
describe how their product operates. Some JDBC driver types are better suited for some applications than
others.
The JDBC type 1 driver, also known as the JDBC-ODBC bridge is a database driver implementation that
employs the ODBC driver to connect to the database. The driver converts JDBC method calls into ODBC
function calls. The bridge is usually used when there is no pure-Java driver available for a particular
database.
The driver is implemented in the sun.jdbc.odbc.JdbcOdbcDriver class and comes with the Java 2 SDK,
Standard Edition. The driver is platform-dependent as it makes use of ODBC which in turn depends on
native libraries of the operating system. Also, using this driver has got other dependencies such as ODBC
must be installed on the computer having the driver and the database which is being connected to must
support an ODBC driver. Hence the use of this driver is discouraged if the alternative of a pure-Java
driver is available.
Type 1 is the simplest of all but platform specific i.e only to Microsoft platform.
A JDBC-ODBC bridge provides JDBC API access via one or more ODBC drivers. Note that some ODBC
native code and in many cases native database client code must be loaded on each client machine that
uses this type of driver. Hence, this kind of driver is generally most appropriate when automatic
installation and downloading of a Java technology application is not important. For information on the
JDBC-ODBC bridge driver provided by Sun, see JDBC-ODBC Bridge Driver.
Type 1 drivers are "bridge" drivers. They use another technology such as Open Database Connectivity
(ODBC) to communicate with a database. This is an advantage because ODBC drivers exist for many
Relational Database Management System (RDBMS) platforms. The Java Native Interface (JNI) is used to
call ODBC functions from the JDBC driver.
A Type 1 driver needs to have the bridge driver installed and configured before JDBC can be used with it.
This can be a serious drawback for a production application. Type 1 drivers cannot be used in an applet
since applets cannot load native code.
Functions:
1. Translates query obtained by JDBC into corresponding ODBC query, which is then handled by the
ODBC driver.
2. Sun provides a JDBC-ODBC Bridge driver. sun.jdbc.odbc.JdbcOdbcDriver. This driver is native
code and not Java, and is closed
source.
3. Client -> JDBC Driver -> ODBC Driver -> Database
4. There is some overhead associated with the translation work to go from JDBC to ODBC.
Advantages:
Almost any database for which ODBC driver is installed, can be accessed.
Disadvantages:
1. Performance overhead since the calls have to go through the JDBC overhead bridge to the ODBC
driver, then to the native database connectivity interface.
2. The ODBC driver needs to be installed on the client machine.
3. Considering the client-side software needed, this might not be suitable for applets.
Type 2 Driver - the Native-API Driver
The JDBC type 2 driver, also known as the Native-API driver is a database driver implementation that
uses the client-side libraries of the database. The driver converts JDBC method calls into native calls of
the database API.
The type 2 driver is not written entirely in Java as it interfaces with non-Java code that makes the final
database calls.
The driver is compiled for use with the particular operating system. For platform interoperability, the
Type 4 driver, being
a full-Java implementation, is preferred over this driver.
A native-API partly Java technology-enabled driver converts JDBC calls into calls on the client API for
Oracle, Sybase, Informix, DB2, or other DBMS. Note that, like the bridge driver, this style of driver
requires that some binary code be loaded on each client machine.
However the type 2 driver provides more functionality and performance than the type 1 driver as it does
not have the overhead of the additional ODBC function calls.
Type 2 drivers use a native API to communicate with a database system. Java native methods are used to
invoke the API functions that perform database operations. Type 2 drivers are generally faster than Type
1 drivers.
Type 2 drivers need native binary code installed and configured to work. A Type 2 driver also uses the
JNI. You cannot use a Type 2 driver in an applet since applets cannot load native code. A Type 2 JDBC
driver may require some Database Management System (DBMS) networking software to be installed.
The Developer Kit for Java JDBC driver is a Type 2 JDBC driver.
Functions:
1. This type of driver converts JDBC calls into calls to the client API for that database.
2. Client -> JDBC Driver -> Vendor Client DB Library -> Database
Advantage
Disadvantages
1. The vendor client library needs to be installed on the client machine.
2. Cannot be used in internet due the client side software needed.
3. Not all databases give the client side library.
Type 3 driver - the Network-Protocol Driver
The JDBC type 3 driver, also known as the network-protocol driver is a database driver implementation
which makes use of a middle-tier between the calling program and the database. The middle-tier
(application server) converts JDBC calls directly or indirectly into the vendor-specific database protocol.
This differs from the type 4 driver in that the protocol conversion logic resides not at the client, but in the
middle-tier. However, like type 4 drivers, the type 3 driver is written entirely in Java.
The same driver can be used for multiple databases. It depends on the number of databases the
middleware has been configured to support. The type 3 driver is platform-independent as the platform-
related differences are taken care by the middleware. Also, making use of the middleware provides
additional advantages of security and firewall access.
A net-protocol fully Java technology-enabled driver translates JDBC API calls into a DBMS-independent
net protocol which is then translated to a DBMS protocol by a server. This net server middleware is able
to connect all of its Java technology-based clients to many different databases. The specific protocol used
depends on the vendor. In general, this is the most flexible JDBC API alternative. It is likely that all
vendors of this solution will provide products suitable for Intranet use. In order for these products to also
support Internet access they must handle the additional requirements for security, access through
firewalls, etc., that the Web imposes. Several vendors are adding JDBC technology-based drivers to
their existing database middleware products.
These drivers use a networking protocol and middleware to communicate with a server. The server then
translates the protocol to DBMS function calls specific to DBMS.
Type 3 JDBC drivers are the most flexible JDBC solution because they do not require any native binary
code on the client. A Type 3 driver does not need any client installation.
Functions:
1. Follows a three tier communication approach.
2. Can interface to multiple databases - Not vendor specific.
3. The JDBC Client driver written in java, communicates with a middleware-net-server using a
database independent protocol, and then this net server translates this request into database
commands for that database.
4. Thus the client driver to middleware communication is database independent.
5. Client -> JDBC Driver -> Middleware-Net Server -> Any Database
Advantages
1. Since the communication between client and the middleware server is database independent, there is
no need for the vendor db library on the client machine. Also the client to middleware need'nt be
changed for a new database.
2. The Middleware Server (Can be a full fledged J2EE Application server) can provide typical
middleware services like caching (connections, query results, and so on), load balancing, logging,
auditing etc..
3. eg. for the above include jdbc driver features in Weblogic.
4. Can be used in internet since there is no client side software needed.
5. At client side a single driver can handle any database.(It works provided the middlware supports that
database!!)
Disadvantages
1. Requires database-specific coding to be done in the middle tier.
2. An extra layer added may result in a time-bottleneck. But typically this is overcome by providing
efficient middleware
services described above.
Type 4 - the Native-Protocol Driver
The JDBC type 4 driver, also known as the native-protocol driver is a database driver implementation that
converts JDBC calls directly into the vendor-specific database protocol.
The type 4 driver is written completely in Java and is hence platform independent. It is installed inside the
Java Virtual Machine of the client. It provides better performance over the type 1 and 2 drivers as it does
not have the overhead of conversion of calls into ODBC or database API calls. Unlike the type 1 and 2
drivers, it does not need associated software to work.
A native-protocol fully Java technology-enabled driver converts JDBC technology calls into the network
protocol used by DBMSs directly. This allows a direct call from the client machine to the DBMS server
and is a practical solution for Intranet access. Since many of these protocols are proprietary the database
vendors themselves will be the primary source for this style of driver. Several database vendors have
these in progress.
As the database protocol is vendor-specific, separate drivers, usually vendor-supplied, need to be used to
connect to the database.
A Type 4 driver uses Java to implement a DBMS vendor networking protocol. Since the protocols are
usually proprietary, DBMS vendors are generally the only companies providing a Type 4 JDBC driver.
Type 4 drivers are all Java drivers. This means that there is no client installation or configuration.
However, a Type 4 driver may not be suitable for some applications if the underlying protocol does not
handle issues such as security and network connectivity well.
The IBM Toolbox for Java JDBC driver is a Type 4 JDBC driver, indicating that the API is a pure Java
networking protocol driver.
Functions
1. Type 4 drivers are entirely written in Java that communicate directly with a vendor's database
through socket connections. No translation or middleware layers, are required, improving
performance.
2. The driver converts JDBC calls into the vendor-specific database protocol so that client applications
can communicate directly with the database server.
3. Completely implemented in Java to achieve platform independence.
4. e.g include the widely used Oracle thin driver - oracle.jdbc.driver. OracleDriver which connect to
jdbc:oracle:thin URL format.
5. Client Machine -> Native protocol JDBC Driver -> Database server
Advantages
These drivers don't translate the requests into db request to ODBC or pass it to client api for the db, nor do
they need a middleware layer for request indirection. Thus the performance is considerably improved.
Disadvantage
JDBC Architecture
The JDBC API contains two major sets of interfaces: the first is the JDBC API for application writers, and the
second is the lower-level JDBC driver API for driver writers. JDBC technology drivers fit into one of four
categories. Applications and applets can access databases via the JDBC API using pure Java JDBC
technology-based drivers, as shown in this figure:
The graphic below illustrates JDBC connectivity using ODBC drivers and existing database client libraries.
Left side, Type 1: JDBC-ODBC Bridge plus ODBC Driver
This combination provides JDBC access via ODBC drivers. ODBC binary code -- and in many cases, database
client code -- must be loaded on each client machine that uses a JDBC-ODBC Bridge. Sun provides a JDBC-
ODBC Bridge driver, which is appropriate for experimental use and for situations in which no other driver is
available.
Sun worked with an array of companies in the industry to create and rapidly establish the JDBC API as the
industry-standard, open interface for Java applications to access databases.
Industry Momentum
Leading database, middleware and tool vendors have been building support for JDBC technology into many
new products. This ensures that customers can build portableJava applications while choosing from a wide
range of competitive products for the solution best suited to their needs. See the Industry Support page for
a list of companies that are shipping products with support for JDBC technology.
Advantages of JDBC Technology
No Installation
A pure JDBC technology-based driver does not require special installation; it is automatically downloaded
as part of the applet that makes the JDBC calls.
Database Connection Identified by URL
JDBC technology exploits the advantages of Internet-standard URLs to identify database connections. The
JDBC API includes an even better way to identify and connect to a data source, using a DataSource object,
that makes code even more portable and easier to maintain.
In addition to this important advantage, DataSource objects can provide connection pooling and
distributed transactions, essential for enterprise database computing. This functionality is provided
transparently to the programmer.
Included in the Java Platform
As a core part of the Java 2 Platform, the JDBC API is available anywhere that the platform is. This means
that your applications can truly write database applications once and access data anywhere. The
JDBC API is included in both the Java 2 Platform, Standard Edition (J2SE) and the Java 2 Platform,
Enterprise Edition (J2EE), providing server-side functionality for industrial strength scalability.
Requirements
Software: The Java 2 Platform (either the Java 2 SDK, Standard Edition, or theJava 2 SDK, Enterprise
Edition), an SQL database, and a JDBC technology-baseddriver for that database.
Hardware: Same as for the Java 2 Platform.
This article introduce you with JDBC and shows you how to our search engine with database.
What is JDBC?
Java Database Connectivity or JDBC for short is set of Java API's that enables the developers to create platform
and database independent applications in java. The biggest advantage of programming in Java is its platform
independence. An application written to access the MS Access database on Win 95/Win NT platform can work on
Linux against Oracle database, only by changing the name of driver, provided none of the database calls it makes are
vendor specific.
JDBC Drivers are set of classes that enables the Java application to communicate with databases. Java.sql that
ships with JDK contains various classes for using relational databases. But these classes do not provide any
implementation, only the behaviors are defined. The actual implementations are done in third-party drivers. Third party
vendors implements the java.sql.Driver interface in their database driver. A list of currently available JDBC drivers
can be found at http://java.sun.com/products/jdbc/jdbc.drivers.html
JDBC Fundamentals
The java program can access the database using JDBC. the seven steps that are needed to access database are
1. Import the package
2. Load and register the driver
3. Establish the Connection
4. Create a Statement object
5. Execute a query
6. Process the result
7. Close the connection
Step1: Import java.sql package
The important classes and interfaces of JDBC are available in the java.sql package . So inorder to access
the databases it must be imported in our application.
import java.sql.*;
Step 2: Loading and registering the driver
In order to access database it must have the particular driver for that database. In Java we have to inform
the Drive Manager about the required driver this is done with the help of the method forName(String str) available
in the class named Class
Class.forName(“path with driver name”);
In an application the user can register more than one driver. The statement used to load and register the
JDBC-ODBC bridge driver is
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Step 3: Establishing the connection
Establishing connection means making a connection to access RDBMS through JDBC driver. The connection
can be established with the help of getConnection() method available in DriverManager class. The established
connection is then set to new connection object.
Connection cn=DriverManager.getConnetion (“jdbc:odbc:DSN”, ”administrator”, “password”);
Where DSN-Data Source Name
When the statement is executed the connection is set to the Connection object cn. For example to connect the
ODBC data source named mydata via JDBC –ODBC bridge the statement is
Connection cn= DriverManager.getConnection (“jdbc:odbc:mydata”);
Step 4: Creating the statement
A Statement object is used for executing a static SQL statement and obtaining the results produced by it.
The createStatement() method is used to create statements using the established connection.
The methods used for creating the statements are
Statement createStatement()
Returns a new Statement object.Used for general queries
PreparedStatement prepareStatement(String sql)
Returns a new PreparedStatement object.For a statement called multiple times with different values
(precompiled to reduce parsing time)
CallableStatement prepareCall(String sql)
Returns a new CallableStatement object for stored procedures
Step 5: Executing the Query
After making connection to the database we are ready to execute the SQL statements. The various
methods available in Statement object to execute the query are
ResultSet executeQuery(String)
Execute a SQL statement that returns a single ResultSet. After executing the SQL statements the
requested data is stored in the ResultSet object.
int executeUpdate(String)
Execute a SQL INSERT, UPDATE or DELETE statement. Returns the number of rows changed.
boolean execute(String)
Execute a SQL statement that may return multiple results.
Step 6: Retrieving the result.
A ResultSet provides access to a table of data generated by executing a Statement.Only one ResultSet per
Statement can be open at once.The table rows are retrieved in sequence. A ResultSet maintains a cursor pointing
to its current row of data. The 'next' method moves the cursor to the next row.
Methods:
public boolean first()
Moves the cursor to the first row in this ResultSet object.
public boolean last()
Moves the cursor to the last row in this ResultSet object.
public boolean next()
Moves the cursor down one row from its current position.
The methods used to retrieve the values from the current row
Type getType(int columnIndex)
Returns the given field as the given type. Fields indexed starting at 1 (not 0)
Type getType(String columnName)
Returns the data at the specified column
In the above methods the Type should be replaced by the valid datatypes such as Boolean, String, Int,
Long, Float etc as getString(Column name), getInt(column index) etc.
Step 7: Closing the connection and statement
When the client request is completed we have to close the created objects of Connection and Statement
using close() method.
st.close();
cn.close();