JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java...

28
JDBC and SQLJ JDBC and SQLJ CIS 612 Spring 2009

Transcript of JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java...

Page 1: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

JDBC and SQLJJDBC and SQLJCIS 612 Spring 2009

Page 2: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

JDBC JDBC JDBC is an API that enables database

access from Java programsJDBC for DB access provides

◦Portability across database servers◦Portability across hardware architectures

JDBC drivers have been implemented for a number of DB servers (Oracle, SQL Server, DB2, Access, etc.)

Page 3: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

JDBC JDBC Java Database Connectivity (JDBC)

has been part of the standard Java standard edition since JDK 1.1◦Current version is JDBC 3.0 (as of J2SE

1.4)◦JDBC classes are contained in the Java

package java.sql◦A JDBC-ODBC bridge is included so

that any ODBC data source available in the JVM host environment can be accessed

Page 4: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

JDBC DriversJDBC DriversThere are 4 types of JDBC drivers

◦Type 1 JDBC-ODBC Bridge◦Type 2 Native API Driver◦Type 3 Network Protocol Driver◦Type 4 Native Protocol Driver

Types 1 and 2, use platform specific code

Types 3 and 4 are all-Java

Page 5: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

Type 1Type 1

Page 6: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

Type 2Type 2

Page 7: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

Type 3Type 3

Page 8: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

Type 4Type 4

Page 9: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

JDBCJDBCSteps in JDBC applications

◦Load JDBC classes (java.sql.*)◦Load the JDBC drivers

Class.forName(“oracle.jdbc.driver.OracleDriver”)

◦Connect to the database Connection conn = DriverManager.getConnection(url,userid,passwd)

jdbc:oracle:drivertype@database

◦Interact with DB using JDBC◦Disconnect from DB

Page 10: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

JDBC ExampleJDBC Example/**********************************************/

/* A Simple JDBC Program (Section 5.2) */

/* Chapter 5; Oracle Programming -- A Primer */

/* by R. Sunderraman */

/**********************************************/

import java.sql.*;

import java.io.*;

class simple {

public static void main (String args [])

throws SQLException, IOException {

try { Class.forName("oracle.jdbc.driver.OracleDriver");

} catch (ClassNotFoundException e {

System.out.println ("Could not load the driver");

}

String user, pass;

user = readEntry("userid : ");

pass = readEntry("password: ");

Page 11: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

JDBC ExampleJDBC ExampleConnection conn = DriverManager.getConnection(

"jdbc:oracle:oci8:"+user+"/"+pass);

Statement stmt = conn.createStatement ();

ResultSet rset = stmt.executeQuery

("select distinct eno,ename,zip,hdate from employees"); while (rset.next ()) {

System.out.println(rset.getInt(1) + " " +

rset.getString(2) + " " +

rset.getInt(3) + " " +

rset.getDate(4));

}

stmt.close();

conn.close(); }

Page 12: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

JDBC ExampleJDBC Example//readEntry function -- to read input string

static String readEntry(String prompt) {

try {

StringBuffer buffer = new StringBuffer();

System.out.print(prompt);

System.out.flush();

int c = System.in.read();

while(c != '\n' && c != -1){

buffer.append((char)c);

c = System.in.read();

}

return buffer.toString().trim();

} catch (IOException e) {

return "";

}

}

}

Page 13: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

The Connection ObjectThe Connection ObjectA Connection represents a session

with a particular database◦All SQL statements are executed and

results returned in the context of a Connection

◦A Java program can have multiple Connections to one or more DBs

◦Default behavior is autocommit◦ Connection object is used to send

statements to the DB server

Page 14: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

JDBC SQL Statement JDBC SQL Statement ClassesClassesThere are three classes for

sending SQL to the DB server◦ Statement. Used for SQL statements

with no parameters.◦ PreparedStatement. Used when the

same statement, possibly with different parameters is to be called multiple times.

◦ CallableStatement. Used for calling stored procedures.

Page 15: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

Other Connection Class Other Connection Class MethodsMethods public abstract void close() throws SQLException

◦Immediately release the Connection’s database and JDBC resources

public abstract void setAutoCommit (boolean autoCommit) throws SQLException

◦ Pass true to enable autocommit, false to disable it

public abstract void rollback() throws SQLException

◦Useful when autocommit is false public abstract DatabaseMetaData getMetaData() throws

SQLException

◦Get metadata from the DB

Page 16: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

PreparedStatement ObjectPreparedStatement ObjectPreparedStatement is compiled,

can be reused, may contain parameters◦Example:

PreparedStatement stmt = conn.prepareStatement(“insert into students values (?, ?, ?, ?)” );

stmt.setString(1, id);

stmt.setString(2, fn);

stmt.setString(3, ln);

stmt.setString(4, mi);

stmt.executeUpdate(); /* executeQuery for Select */

Page 17: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

ResultSet ClassResultSet ClassThe result of an executeQuery is a

single ResultSet object◦This class provides access to the table

resulting from the query◦A cursor points to the current row

(initially positioned before the first row.◦Use the next method to fetch the next

row◦The current row’s column values are

retrieved using the getXXX methods, where XXX is a Java type. Pass either an index or the column name to

specify which column

Page 18: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

ResultSet ClassResultSet ClassUse the wasNull method to check

whether the previously read column value was Null.

Use getMetaData to obtain info like number, types and properties of the columns of a ResultSet

Page 19: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

Errors and WarningsErrors and WarningsThe SQLException class provides

information about errors while accessing the db◦Contains the error message as a String

object Retrieve it using the getMessage method

◦SQLState string identifies the exception according to the X/Open SQL spec Retrieve it using getSQLState method

◦Link to the next exception Retrieve it using getNextException method

Page 20: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

Errors and WarningsErrors and Warningstry {some JDBC statement to access the DB;

} catch (SQLException e) {System.out.println(“SQL Exception caught!”);while (e!= null) {

System.out.println(“Error Message = “ +e.getMessage());

System.out.println(“SQL State = “ + e.getSQLState());

System.out.println(“Error Code = “ +e.getErrorCode());

e = e.getNextException();}

}

Page 21: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

Errors and WarningsErrors and WarningsThe SQLWarning class provides info

about warnings generated during DB access◦Use getMessage to get the warning

string◦Use getSQLState to get warning

according to X/Open SQL Spec◦Use getErrorCode for vendor specific

code◦Use getNextWarning for next warning

generated

Page 22: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

Scrollable ResultSetScrollable ResultSetSince JDBC 2.0, ResultSet objects are

now updatable and scrollable◦The Statement object must be created using

the following Connection class method◦Statement createStatement(int

resultSetType, Int resultSetConcurrency)

◦Where resultSetType is one of: TYPE_FORWARD_ONLY (default – old behavior), TYPE_SCROLL_INSENSITIVE (can scroll forwards and back, don’t see changes to ResultSet object in the DB), TYPE_SCROLL_SENSITIVE (changes are visible)

Page 23: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

Scrollable ResultSetScrollable ResultSetThe resultSetConcurrency parameter

takes one of the following values:◦CONCUR_READ_ONLY (default – old

behavior) data is read only◦CONCUR_UPDATABLE – the Java program

can make changes to the database based on the new methods and positioning of the cursor

Create the scrollable ResultSet using the usual executeQuery method of the Statement object

Page 24: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

Scrollable ResultSetScrollable ResultSetMethods for cursor positioning

include◦absolute(int row)◦relative(int row)◦first()◦last()◦previous()◦next()◦beforeFirst()◦afterLast()

Page 25: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

More on StatementsMore on StatementsThe Statement interface provides

three different methods for executing SQL statements◦We have already seen executeQuery

for statements that produce a result set

◦The method executeUpdate is used to execute INSERT, UPDATE, DELETE or DDL statements The return value is an integer indicating

the number of rows affected by an update (0 for a DDL statement)

Page 26: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

More on StatementsMore on StatementsThe execute method should be used

only when it is possible that a statement may return more than one ResultSet object, more than one update count, or a combination of these◦Possibly through executing a stored

procedure call, or through executing a SQL statement which is unknown at compile time (e.g. use JDBC to implement SQL*Plus)

◦Returns true if first result is a result set, false if it is an update count

Page 27: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

CallableStatementCallableStatementA CallableStatement object

provides a way to call stored procedures in a standard way for all vendor DBs◦Written using “escape syntax” (syntax

the driver must translate for a particular DB) with one of two forms Without result parameter – {call

proc_name[(?,?, …)]} With result parameter – {? = call

proc_name[(?,?, …)]}

Page 28: JDBC and SQLJ CIS 612 Spring 2009. JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.

CallableStatementCallableStatementPassing IN parameters is done using

the setXXX methods inherited from PreparedStatement◦pstmt.setLong(1, 12345);

pstmt.setLong(2, 345);If OUT parameters are used, the

JDBC type of each OUT parameter must be registered before execution◦cstmt.registerOutParameter(1,

java.sql.Types.TINYINT);◦Then use getXXX methods to retrieve

OUT parameter values byte x = cstmt.getByte(1);