0% found this document useful (0 votes)
13 views16 pages

JDBC: Java Database Connectivity Overview

Uploaded by

poonam pandit
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views16 pages

JDBC: Java Database Connectivity Overview

Uploaded by

poonam pandit
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Java Programming

Unit VI – Interacting with Database


JDBC Overview
 JDBC API is a Java API that can access any kind of tabular data, especially data stored in a
Relational Database.
 JDBC works with Java on a variety of platforms, such as Windows, Mac OS, and the various
versions of UNIX.
 JDBC stands for Java Database Connectivity, which is a standard Java API for database-
independent connectivity between the Java programming language and a wide range of databases.
 The JDBC library includes APIs for each of the tasks mentioned below that are commonly
associated with database usage.
 Making a connection to a database.
 Creating SQL or MySQL statements.
 Executing SQL or MySQL queries in the database.
 Viewing & Modifying the resulting records.

Applications of JDBC

 Fundamentally, JDBC is a specification that provides a complete set of interfaces that allows for
portable access to an underlying database. Java can be used to write different types of
executables, such as,
 Java Applications
 Java Applets
 Java Servlets
 Java ServerPages (JSPs)
 Enterprise JavaBeans (EJBs).
 All of these different executables are able to use a JDBC driver to access a database, and
take advantage of the stored data.
 JDBC provides the same capabilities as ODBC, allowing Java programs to contain database-
independent code.

The JDBC 4.0 Packages

 The [Link] and [Link] are the primary packages for JDBC 4.0.
 It offers the main classes for interacting with your data sources.
 The new features in these packages include changes in the following are as,
 Automatic database driver loading.
 Exception handling improvements.
 Enhanced BLOB/CLOB functionality.
 Connection and statement interface enhancements.
 National character set support.
 SQL ROWID access.
 SQL 2003 XML data type support.

1
Java Programming

JDBC Architecture

 The JDBC API supports both two-tier and three-tier processing models for database access
but in general, JDBC Architecture consists of two layers −
 JDBC API: This provides the application-to-JDBC Manager connection.
 JDBC Driver API: This supports the JDBC Manager-to-Driver Connection.
 The JDBC API uses a driver manager and database-specific drivers to provide transparent
connectivity to heterogeneous databases.
 The JDBC driver manager ensures that the correct driver is used to access each data source. The
driver manager is capable of supporting multiple concurrent drivers connected to multiple
heterogeneous databases.
 Following is the architectural diagram, which shows the location of the driver manager with
respect to the JDBC drivers and the Java application

JDBC Components

The JDBC API provides the following interfaces and classes −


 DriverManager: This class manages a list of database drivers. Matches connection requests from
the java application with the proper database driver using communication sub protocol. The first
driver that recognizes a certain subprotocol under JDBC will be used to establish a database
Connection.
 Driver: This interface handles the communications with the database server. You will
interact directly with Driver objects very rarely. Instead, you use DriverManager objects, which
manages objects of this type. It also abstracts the details associated with working with Driver
objects.

2
Java Programming

 Connection: This interface with all methods for contacting a database. The connection object
represents communication context, i.e., all communication with database is through connection
object only.
 Statement: You use objects created from this interface to submit the SQL statements to the
database. Some derived interfaces accept parameters in addition to executing stored procedures.
 ResultSet: These objects hold data retrieved from a database after you execute an SQL query
using Statement objects. It acts as an iterator to allow you to move through its data.
 SQLException: This class handles any errors that occur in a database application.

JDBC Driver

 JDBC drivers implement the defined interfaces in the JDBC API, for interacting with your
database server.
 For example, using JDBC drivers enable you to open database connections and to interact with it
by sending SQL or database commands then receiving results with Java.
 The [Link] package that ships with JDK, contains various classes with their behaviours defined
and their actual implementaions are done in third-party drivers. Third party vendors implement
the [Link] interface in their database driver.

JDBC Drivers Types

 JDBC driver implementations vary because of the wide variety of operating systems and hardware
platforms in which Java operates.
 Sun has divided the implementation types into four categories:
 Type 1: JDBC-ODBC Bridge Driver
 Type 2: JDBC-Native API
 Type 3: JDBC-Net pure Java
 Type 4: 100% Pure Java

Type 1: JDBC-ODBC Bridge Driver

 In a Type 1 driver, a JDBC bridge is used to access ODBC drivers installed on each client
machine.
 Using ODBC, requires configuring on your system a Data Source Name (DSN) that represents
the target database.

3
Java Programming

 When Java first came out, this was a useful driver because most databases only supported ODBC
access but now this type of driver is recommended only for experimental use or when no other
alternative is available.
 The JDBC-ODBC Bridge that comes with JDK 1.2 is a good example of this kind of driver.

Type 2: JDBC-Native API

 In a Type 2 driver, JDBC API calls are converted into native C/C++ API calls, which are unique
to the database.
 These drivers are typically provided by the database vendors and used in the same manner as the
JDBC-ODBC Bridge. The vendor-specific driver must be installed on each client machine.
 If we change the Database, we have to change the native API, as it is specific to a database and
they are mostly obsolete now, but you may realize some speed increase with a Type 2 driver,
because it eliminates ODBC's overhead.

 The Oracle Call Interface (OCI) driver is an example of a Type 2 driver.

Type 3: JDBC-Net pure Java

 In a Type 3 driver, a three-tier approach is used to access databases. The JDBC clients use
standard network sockets to communicate with a middleware application server.

4
Java Programming

 The socket information is then translated by the middleware application server into the call
format required by the DBMS, and forwarded to the database server.
 This kind of driver is extremely flexible, since it requires no code installed on the client and a
single driver can actually provide access to multiple databases.
 You can think of the application server as a JDBC "proxy," meaning that it makes calls for the
client application. As a result, you need some knowledge of the application server's configuration
in order to effectively use this driver type.
 Your application server might use a Type 1, 2, or 4 driver to communicate with the database,
understanding the nuances will prove helpful.

Type 4: 100% Pure Java

 In a Type 4 driver, a pure Java-based driver communicates directly with the vendor's database
through socket connection. This is the highest performance driver available for the database and
is usually provided by the vendor itself.
 This kind of driver is extremely flexible, you don't need to install special software on the client or
server. Further, these drivers can be downloaded dynamically.

 MySQL's Connector/J driver is a Type 4 driver. Because of the proprietary nature of their
network protocols, database vendors usually supply type 4 drivers.

Creating JDBC Application

There are following six steps involved in building a JDBC application:


 Import the packages: Requires that you include the packages containing the JDBC classes
needed for database programming. Most often, using import [Link].* will suffice.
 Register the JDBC driver: Requires that you initialize a driver so you can open a
communication channel with the database.
 Open a connection: Requires using the [Link]() method to create a
Connection object, which represents a physical connection with the database.
 Execute a query: Requires using an object of type Statement for building and submitting an SQL
statement to the database.

5
Java Programming

 Extract data from result set: Requires that you use the
appropriate [Link]() method to retrieve the data from the result set.
 Clean up the environment: Requires explicitly closing all database resources versus
relying on the JVM's garbage collection.

JDBC Connection Class


The programming involved to establish a JDBC connection is fairly simple. Here are these simple four
steps:
 Import JDBC Packages: Add import statements to your Java program to import required
classes in your Java code.
 Register JDBC Driver: This step causes the JVM to load the desired driver implementation into
memory so it can fulfill your JDBC requests.
 Database URL Formulation: This is to create a properly formatted address that points to the
database to which you wish to connect.
 Create Connection Object: Finally, code a call to the DriverManager object's getConnection(
) method to establish actual database connection.

Import JDBC Packages

 The Import statements tell the Java compiler where to find the classes you reference in your
code and are placed at the very beginning of your source code.
 To use the standard JDBC package, which allows you to select, insert, update, and delete data
in SQL tables, add the following imports to your source code
import [Link].* ; // for standard JDBC programs
import [Link].* ; // for BigDecimal and BigInteger support

Register JDBC Driver

 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.
 You need to do this registration only once in your program. You can register a driver in one of
two ways.

1. Approach I - [Link]()

 The most common approach to register a driver is to use Java's [Link]() method, to
dynamically load the driver's class file into memory, which automatically registers it. This
method is preferable because it allows you to make the driver registration configurable and
portable.
 The following example uses [Link]( ) to register the Oracle driver −

[Link]("[Link]");

Following JDBC program establishes connection with MySQL database. Here, we are trying to register the
MySQL driver using the forName() method.

6
Java Programming

import [Link];
import [Link];
import [Link];
public class RegisterDriverExample {
public static void main(String args[]) throws SQLException {
//Registering the Driver
[Link]("[Link]");
//Getting the connection
String mysqlUrl = "jdbc:mysql://localhost/mydatabase";
Connection con = [Link](mysqlUrl, "root", "password");
[Link]("Connection established: "+con);
}
}
2. Approach II - [Link]()

 The second approach you can use to register a driver, is to use the
static [Link]() method.
 You should use the registerDriver() method if you are using a non-JDK compliant JVM, such as
the one provided by Microsoft.
 The following example uses registerDriver() to register the Oracle driver

Driver myDriver = new [Link]();


[Link](myDriver);

e.g.
import [Link];
import [Link];
import [Link];
public class RegisterDriverExample {
public static void main(String args[]) throws SQLException {
//Registering the Driver
[Link](new [Link]());
//Getting the connection
String mysqlUrl = "jdbc:mysql://localhost/mydatabase";
Connection con = [Link](mysqlUrl, "root", "password");
[Link]("Connection established: "+con);
}
}

Database URL Formulation

 After loaded the driver, you can establish a connection using


the [Link]() method.
 The following are list the three overloaded [Link]() methods:
7
Java Programming
 getConnection(String url)
 getConnection(String url, Properties prop)
 getConnection(String url, String user, String password)
 Here each form requires a database URL. A database URL is an address that points to your
database.
 Formulating a database URL is where most of the problems associated with establishing a
connection occurs.
 Following table lists down the popular JDBC driver names and database URL.
RDBM JDBC driver name URL format
S
MySQL [Link] jdbc:mysql://hostname/
databaseName
ORACLE [Link] jdbc:oracle:thin:@hostname:port
Number:databaseName
DB2 [Link].DB2Driver jdbc:db2:hostname:port
Number/databaseName
Sybase [Link] jdbc:sybase:Tds:hostname: port
Number/databaseName
 All the highlighted part in URL format is static and you need to change only the remaining part
as per your database setup.

Create Connection Object

 There are three forms of [Link]() method to create a connection object.

1. Using a Database URL with a username and password

 The most commonly used form of getConnection() requires you to pass a database URL, a
username, and a password:
 Assuming you are using Oracle's thin driver, you'll specify a host:port:databaseName value for
the database portion of the URL.
 If you have a host at TCP/IP address [Link] with a host name of amrood, and your Oracle
listener is configured to listen on port 1521, and your database name is EMP, then complete
database URL would be:

 Now call getConnection() method with appropriate username and password to get a
Connection object as follows:

2. Using Only a Database URL

 A second form of the [Link]( ) method requires only a database


URL:
[Link](String url);
 However, in this case, the database URL includes the username and password and has the
following general form

 So, the above connection can be created as follows:

8
Java Programming
3. Using a Database URL and a Properties Object

 A third form of the [Link]( ) method requires a database URL and a


Properties object −
[Link](String url, Properties info);
 A Properties object holds a set of keyword-value pairs. It is used to pass driver properties to the
driver during a call to the getConnection() method.
 To make the same connection made by the previous examples, use the following code −

Closing JDBC Connections

 At the end of your JDBC program, it is required explicitly to close all the connections to the
database to end each database session. However, if you forget, Java's garbage collector will close
the connection when it cleans up stale objects.
 Relying on the garbage collection, especially in database programming, is a very poor
programming practice. You should make a habit of always closing the connection with the
close() method associated with connection object.
 To ensure that a connection is closed, you could provide a 'finally' block in your code. A
finally block always executes, regardless of an exception occurs or not.
 To close the above opened connection, you should call close() method as follows:
[Link]();
Explicitly closing a connection conserves DBMS resources, which will make your database
administrator happy.

ResultsetMetaData
 The ResultSetMetaData provides information about the obtained ResultSet object like, the
number of columns, names of the columns, datatypes of the columns, name of the table etc…
 Following are some methods of ResultSetMetaData class.

Method Description
getColumnCount() Retrieves the number of columns in the current ResultSet object.
getColumnLabel() Retrieves the suggested name of the column for use.
getColumnName() Retrieves the name of the column.
getTableName() Retrieves the name of the table.

SQLException
 Exception handling allows you to handle exceptional conditions such as program-defined errors
in a controlled fashion.
 When an exception condition occurs, an exception is thrown. The term thrown means that current
program execution stops, and the control is redirected to the nearest applicable catch clause. If no
applicable catch clause exists, then the program's execution ends.
 JDBC Exception handling is very similar to the Java Exception handling but for JDBC, the most
common exception you'll deal with is [Link].

9
Java Programming
SQLException Methods

 An SQLException can occur both in the driver and the database. When such an exception occurs,
an object of type SQLException will be passed to the catch clause.
 The passed SQLException object has the following methods available for retrieving additional
information about the exception:
Method Description
getErrorCode( ) Gets the error number associated with the
exception.
getMessage( ) Gets the JDBC driver's error message for an
error, handled by the driver or gets the Oracle
error number and message for a database error.
getSQLState( ) Gets the XOPEN SQLstate string. For a JDBC
driver error, no useful information is returned from
this method. For a database error, the five- digit
XOPEN SQLstate code is returned. This
method can return null.
getNextException( ) Gets the next Exception object in the exception
chain.
printStackTrace( ) Prints the current exception, or throwable, and
it's backtrace to a standard error stream.
printStackTrace(PrintStream s) Prints this throwable and its backtrace to the print
stream you specify.
printStackTrace(PrintWriter w) Prints this throwable and it's backtrace to the print
writer you specify.

JDBC Statements

 Once a connection is obtained we can interact with the database.


 The JDBC Statement, CallableStatement, and PreparedStatement interfaces define the methods
and properties that enable you to send SQL or PL/SQL commands and receive data from your
database.
 They also define methods that help bridge data type differences between Java and SQL data types
used in a database.
 The following table provides a summary of each interface's purpose to decide on the interface to
use.

Interfaces Recommended Use


Statement Use this for general-purpose access to your database. Useful when you are
using static SQL statements at runtime. The Statement interface cannot
accept parameters.
PreparedStatement Use this when you plan to use the SQL statements many times. The
PreparedStatement interface accepts input parameters at runtime.
CallableStatement Use this when you want to access the database stored procedures. The
CallableStatement interface can also accept runtime input parameters.

10
Java Programming
Statement Interface:

JDBC Statement interface defines the methods and properties to enable send SQL commands to MySQL database
and retrieve data from the database. Statement is used for general-purpose access to your database. It is useful
when you are using static SQL statements at runtime. The Statement interface cannot accept parameters.

Before you can use a Statement object to execute a SQL statement, you need to create one using the Connection
object's createStatement( ) method, as in the following example

Statement stmt = null;

try {

stmt = [Link]( );

...

catch (SQLException e) {

...

finally {

...

e.g.

import [Link];

import [Link];

import [Link];

import [Link];

import [Link];

public class TestApplication {

static final String DB_URL = "jdbc:mysql://localhost/TUTORIALSPOINT";

static final String USER = "guest";

static final String PASS = "guest123";

11
Java Programming
static final String QUERY = "SELECT id, first, last, age FROM Employees";

static final String UPDATE_QUERY = "UPDATE Employees set age=30 WHERE id=103";

public static void main(String[] args) {

// Open a connection

try(Connection conn = [Link](DB_URL, USER, PASS);

Statement stmt = [Link]();

){

// Let us check if it returns a true Result Set or not.

Boolean ret = [Link](UPDATE_QUERY);

[Link]("Return value is : " + [Link]() );

// Let us update age of the record with ID = 103;

int rows = [Link](UPDATE_QUERY);

[Link]("Rows impacted : " + rows );

// Let us select all the records and display them.

ResultSet rs = [Link](QUERY);

// Extract data from result set

while ([Link]()) {

// Retrieve by column name

[Link]("ID: " + [Link]("id"));

[Link](", Age: " + [Link]("age"));

[Link](", First: " + [Link]("first"));

[Link](", Last: " + [Link]("last"));

[Link]();

12
Java Programming
} catch (SQLException e) {

[Link]();

} // Let us update age of the record with ID = 103;

int rows = [Link](UPDATE_QUERY);

[Link]("Rows impacted : " + rows );

// Let us select all the records and display them.

ResultSet rs = [Link](QUERY);

// Extract data from result set

while ([Link]()) {

// Retrieve by column name

[Link]("ID: " + [Link]("id"));

[Link](", Age: " + [Link]("age"));

[Link](", First: " + [Link]("first"));

[Link](", Last: " + [Link]("last"));

[Link]();

} catch (SQLException e) {

[Link]();

13
Java Programming

PreparedStatement:
Creating PreparedStatement Object
PreparedStatement pstmt = null;
try {
String SQL = "Update Employees SET age = ? WHERE id = ?";
pstmt = [Link](SQL);
...
}
catch (SQLException e) {
...
}
finally {
...
}

e.g.
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class TestApplication {


static final String DB_URL = "jdbc:mysql://localhost/TUTORIALSPOINT";
static final String USER = "guest";
static final String PASS = "guest123";
static final String QUERY = "SELECT id, first, last, age FROM Employees";
static final String UPDATE_QUERY = "UPDATE Employees set age=? WHERE id=?";

public static void main(String[] args) {


// Open a connection
try(Connection conn = [Link](DB_URL, USER, PASS);
PreparedStatement stmt = [Link](UPDATE_QUERY);
){
// Bind values into the parameters.
[Link](1, 35); // This would set age
[Link](2, 102); // This would set ID

// Let us update age of the record with ID = 102;


int rows = [Link]();
[Link]("Rows impacted : " + rows );

// Let us select all the records and display them.


ResultSet rs = [Link](QUERY);

// Extract data from result set


while ([Link]()) {
// Retrieve by column name
[Link]("ID: " + [Link]("id"));
[Link](", Age: " + [Link]("age"));
14
Java Programming
[Link](", First: " + [Link]("first"));
[Link](", Last: " + [Link]("last"));
}
[Link]();
} catch (SQLException e) {
[Link]();
}
}
}

ResultSet:
The SQL statements that read data from a database query, return the data in a result set. The SELECT
statement is the standard way to select rows from a database and view them in a result set.
The [Link] interface represents the result set of a database query.

15
Java Programming

16

You might also like