java database connectivity vijayan sugumaran department of dis oakland university

28
Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Upload: kristopher-thomas

Post on 11-Jan-2016

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Java Database Connectivity

Vijayan Sugumaran

Department of DIS

Oakland University

Page 2: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Java Database Connectivity (JDBC)

JDBC – provides an interface to Relational Data Sources

JDBC library provides the means for executing SQL statements to access and operate on a relational database

JDBC library is implemented in the java.sql package Set of classes and interfaces that provide a

uniform API for access to broad range of databases

Page 3: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Talking to Databases A JDBC based application is insulated from the

characteristics of specific database engines

Java Application

JDBC

AccessDatabase

OracleDatabase

SybaseDatabase

Page 4: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

JDBC Concepts JDBC’s design is very similar to the design of

ODBC Driver Manager

Loads database drivers, and manages the connection between the application and the driver

Driver Translates API calls into operations for a specific

data source

Connection A session between an application and a database

Page 5: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

JDBC Concepts (contd.)Statement

An SQL Statement to perform a query or update operation

Metadata Information about returned data, the

database and the driverResultSet

Logical set of columns and rows returned by executing an SQL statement (resulting tuples)

Page 6: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

JDBC Component Interaction

DriverManager

Connection Statement ResultSet

Driver

Database

Creates Creates Creates

SQL

Result(tuples)

EstablishLink to DB

Page 7: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Steps Involved in Basic JDBC Operations

Driver

Driver Manager

Connection

Statement

Result Set

1. Load the JDBC driver class: Class.forName(“driverName”);

2. Open a database connection: DriverManager.getConnection

(“jdbc:xxx:datasource”);

3. Issue SQL statements: stmt = con.createStatement();

stmt.executeQuery (“Select * from myTable”);

4. Process result set:while (rs.next()) {name = rs.getString(“name”);amount = rs.getInt(“amt”); }

Database

Page 8: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Two-Tier Database Access Model

Java Application talks directly to the database

Accomplished through the JDBC driver which sends commands directly to the database

Results sent back directly to the application

Application Space

Java Application

JDBC Driver

Database

SQLCommand

ResultSet

Page 9: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Three-Tier Database Access Model

JDBC driver sends commands to a middle tier, which in turn sends commands to database.

Results are sent back to the middle tier, which communicates them back to the application

Application Space

Java Application

JDBC Driver

Database

SQLCommand

ResultSet

Application Server(middle-tier)

ProprietaryProtocol

Page 10: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

JDBC Driver Types JDBC-ODBC Bridge, plus ODBC driver (Type 1)

Simplest JDBC methods -> Translate JDBC methods to ODBC methods -

> ODBC to native methods -> Native methods API Native-API, partly Java driver (Type 2)

JDBC methods -> Map JDBC methods to native methods (calls to vendor library) -> Native methods API (vendor library)

JDBC-net, pure Java driver (Type 3) JDBC methods -> Translate to Native API methods through

TCP/IP network -> Native API methods Native-protocol, pure Java driver (Type 4)

Java methods -> Native methods in Java

Page 11: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Type 1: JDBC-ODBC Bridge, Plus ODBC Driver

This driver type is provided by Sun with JDK

Provides JDBC access to databases through ODBC drivers

ODBC driver must be configured for the bridge to work

Only solution if no JDBC driver available for the DBMS

Application Space

Java Application

JDBC – ODBC Bridge

Database

SQLCommand

ResultSet

ODBC Driver

ProprietaryProtocol

Page 12: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Type 2: Native-API, Partly Java Driver

Native-API driver converts JDBC commands into DBMS-specific native calls

Same restrictions as Type1 – must have some binary code loaded on its machine

Directly interfaces with the database

Application Space

Java Application

Type 2 JDBC Driver

Database

SQLCommand

ResultSet

Native DatabaseLibrary

ProprietaryProtocol

Page 13: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Type 3: JDBC-Net, Pure Java Driver

Translates JDBC calls into a database-independent network protocol and sent to a middleware server.

This server translates this DBMS-independent protocol into a DBMS-specific protocol and sent to the database

Results sent back to the middleware and routed to the client

Application Space

Java Application

Type 3 JDBC Driver

Database

SQLCommand

ResultSet

Middleware Space

ProprietaryProtocol

JDBC Driver

Page 14: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Type 4: Native-Protocol, Pure Java Driver

Pure Java drivers that communicate directly with the vendor’s database

JDBC commands converted to database engine’s native protocol directly

Advantage: no additional translation or middleware layer

Improves performance

Application Space

Java Application

Type 4 JDBC Driver

Database

SQL CommandUsing Proprietary

Protocol

Result SetUsing Proprietary

Protocol

Page 15: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Driver Manager The DriverManager class is responsible for establishing

connections to the data sources, accessed through the JDBC drivers

JDBC database drivers are defined by classes that implement the “Driver” interface

The “Properties” class defined in java.util package defines/stores the property (key) and the corresponding value (object)

You can use the “setProperty” method to set the value of any of the properties E.g: System.setProperty(“jdbc.drivers”, “sun.jdbc.odbc.JdbcOdbcDriver”)

The first is the key (or name) for the property to be set and the second argument is the value to be set

Page 16: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Driver Manager (contd) If a security manager is in effect, may not be able to set the

System property – then setProperty() will throw an exception of type “Security Exception”

If not able to set System property, the driver can be loaded explicitly by calling the static method “forName” in the “Class” class and pass the driver argument Eg: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

The “forName()” method can throw a “ClassNotFoundException” if the driver class is not found. Hence, this function call should be in a try-catch block

The above statement loads the JDBC driver and takes care of any initialization that needs to be done

Page 17: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Connection Object Creating a connection to a data source Connection object represents an established

connection to a particular data source A connection object can also be used to query the

data source (data and meta data) Different versions of getConnection() method

contained in the DriverManager class that returns a connection object: Connection myconn = DriverManager.getConnection(source); Connection myconn = DriverManager.getConnection(source,

username, password); Example

String mysource = “jdbc:odbc:technical_library”;Connection myconn = DriverManager.getConnection(mysource);

System DSN name – ODBC data source

Page 18: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

DSN-less Connection Making a connection to the database without

having to specify the DSN variable at the system level

Explicitly specify a connection string Should be exactly the same as shown below

except the name of the database and its path

String source = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=movies_vj.mdb"; con = DriverManager.getConnection(source);

•Database name, should be in the same directory as the class•Can also specify absolute path

Page 19: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Statement Object Provides workspace for creating an SQL query, execute it, and retrieve

the results that are returned Statement objects are created by calling the createStatement() method

of a valid connection object Used to execute an SQL query by calling the executeQuery() method of

Statement object The SQL query string is passed as argument to the executeQuery()

method The result of executing the query is returned as on object of type

“ResultSet”

JDBC Provides two other kinds of objects to execute SQL statement: PreparedStatement -> extends Statement class CallableStatement -> extends PreparedStatement class

Statement mystatement = myconn.createStatement();ResultSet myresults = mystatement.executeQuery(“select * from authors”);

Page 20: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

ResultSet Object The results of executing an SQL query are returned in the form of

an object that implements the ResultSet interface

ResultSet object contains a “cursor” that points to a particular record (called the current record)

When the ResultSet object is created, the cursor points to the position immediately preceeding the first record

Several methods available to navigate the ResultSet by moving the cursor first(), last(), beforeFirst(), afterLast(), next(), previous(), etc.

//returns true if the move is successful isFirst() //whether you reached the beginning of the ResultSet isLast() // whether you reached the end of the ResultSet

Page 21: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Accessing Data in a ResultSet We can retrieve the value of any column for the current row (specified by

the cursor) by name or position Using Name: authorNames.getString(“lastname”);

Using Position: authorNames.getString(2);

Using the column position is a little bit faster Methods for Retrieving Column Data

getString(), getInt(), getShort(), getFloat(), getDouble(), getTime() etc. We can always use getString() method for numerical values if we are not

going to do some computations Column names are NOT case sensitive ResultSetMetaData object has metadata information about records, I.e.,

column names, data types etc.

Name of theResultSet

Method that returnsthe value of String

Name of the column or attribute

Second column in the row or tuple

Page 22: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Getting MetaData for a ResultSet The ResultSetMetaData object encapsulates the metadata for a

ResultSet object Use getMetaData() method of ResultSet object to get the metadata Some of the methods of ResultSetMetaData object:

getColumnName() // returns column name getColumnType() // returns column data type getColumnCount() // # of columns in the row getTableName() //returns the name of the table getColumnLabel() //suggested label for a column

for use in printouts The Types class in java.sql package contains the field types used

in SQL Eg: CHAR, VARCHAR, DOUBLE, INT, TIME etc.

Once we know the SQL data type, then we can call the appropriate getXXX() function for getting the value of that column

Page 23: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Scrollable Result Sets In JDBC1.0, result sets could be

navigated in only one direction (forward) and starting at only one point (first row)

Since JDBC 2.0, the cursor can be manipulated as if it were a array index

Methods exist for reading both forward and backward, for starting from any row, and for testing the current cursor location.

Page 24: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

JDBC 2.0 Navigation Methods for Scrollable Result Sets

boolean next ( ) Advances the cursor to the next row.

boolean previous ( ) Moves the cursor back one row.

boolean first ( ) Moves the cursor to the first row.

boolean last ( ) Moves the cursor to the last row.

void beforeFirst ( ) Moves the cursor before the first row, usually in anticipation of calling next ( )

void afterLast ( ) Moves the cursor after the last row, usually in anticipation of calling previous ( )

boolean Moves the cursor to the specifiedabsolute (int row) row. Specifying a negative number moves the cursor relative to the end of the result set;

Page 25: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

JDBC 2.0 Navigation Methods for Scrollable Result Sets (contd.)

boolean Moves the cursor forward orrelative (int row) backward the number of rows specified.

boolean True if the cursor is before the isBeforeFirst ( ) first row.

boolean True if the cursor is after theisAfterLast ( ) last row.

boolean isFirst ( ) True if the cursor is positioned on the first row.

boolean isLast ( ) True if the cursor is positioned on the last row.

Page 26: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Creating Scrollable Result Sets Statement object created with parameters to indicate specific

capabilities Connection.createStatement() method can have up to three

parameters: resultSetType – type of scrolling to be used resultSetConcurrency – indicates whether the result set can be

updated resultSetHoldability – specifies whether to close cursors when a

commit is done Example

stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

Page 27: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Constants in Result SetsCursor Related Constants

TYPE_FORWARD_ONLY JDBC 1.0-style navigation in which the cursor

starts at the first row and can only move forward.

TYPE_SCROLL_INSENSITIVE All cursor positioning methods are enabled; the

result set doesn’t reflect changes made by others in the underlying table.

TYPE_SCROLL_SENSITIVE All cursor positioning methods are enabled the

result set reflects changes made by others in the underlying table.

Page 28: Java Database Connectivity Vijayan Sugumaran Department of DIS Oakland University

Constants in Result Sets (contd.)Updating Record Sets

CONCUR_READ_ONLY The results set won’t be updatable

CONCUR_UPDATABLE Rows can be added and deleted, and

columns can be updated.

Closing Cursors HOLD_CURSORS_OVER_COMMIT

Do not close cursors after a commit is done.

CLOSE_COURSORS_AT_COMMIT Close cursors when a commit is done.