Helia / Martti Laiho, 1998-2000 JDBC Java Database Connection.

21
Helia / Martti Laiho, 1998-2 JDBC Java Database Connection

Transcript of Helia / Martti Laiho, 1998-2000 JDBC Java Database Connection.

Helia / Martti Laiho, 1998-2000

JDBCJava Database Connection

Helia / Martti Laiho, 1998-2000

Notes on JDBC - Java Database Connection

Class Library: java.sql.*

Literature/sources:

• SunSoft: http://java.sun.com/products/jdbc JDBC Specification• jdk1.3/docs/guide/jdbc/ JDBC Guide: Getting Started

• Seth White & al: JDBCTM API Tutorial and Reference, 2nd ed

• Horstmann & Cornell: Core JAVA Volume II Chapter 4 • Orfali & Harkey: Client/Server Programming with JAVA and CORBA• Siple: The Complete Guide to JAVA Database Programming, McGraw-Hill

• SOLID JDBC: sj23win.zip SOLID JDBC Driver Programmer’s Guide

• Melton & Eisenberg: Understanding SQL and Java Together

Helia / Martti Laiho, 1998-2000

JDBC 1.0 API

• Designed by JavaSoft• based on ISO SQL/CLI and Microsoft ODBC API• provided in java.sql package• 4 types of JDBC Driver implementation

Helia / Martti Laiho, 1998-2000

Types of JDBC Implementations

Java appl

JDBC-ODBCbridge

ODBCdriver

DBMS

Java appl

JDBCdriver

Nativedb-library

DBMS

Java appl

JDBC servergateway

DBMS

Java appl

DBMS

Proprietaryprotocol

Proprietaryprotocol

JDBCdriver

JDBCdriver

DBMS- independentprotocol

DBMS- specificprotocol

Type 1 Type 2 Type 3 Type 4

- Melton & Eisenberg

- Oracle JDBC/OCI - Oracle Thin JDBC- Sybase jConnect- Solid

Helia / Martti Laiho, 1998-2000

SQL and Java data types

SQL data type:

INT[EGER]SMALLINTNUMERIC (m, n)DECIMAL (m, n)DEC (m, n)FLOAT (n)REALDOUBLECHAR[ACTER] (n)VARCHAR (n)DATETIMETIMESTAMP

Java data type:

intshortjava.sql.BigDecimaljava.sql.BigDecimaljava.sql.BigDecimal doublefloatdoubleStringStringjava.sql.Datejava.sql.Timejava.sql.Timestamp

Helia / Martti Laiho, 1998-2000

Java.sql - Interfaces / Methods

...

getMetaData()setAutoCommit(b)setTransaction Isolation(level)createStatement()prepareStatement(sql)prepareCall(sql)commit()rollback()close()

setCursorName(s)executeQuery(sql)executeUpdate(sql)cancel()close()

getMetaData()findColumn(name)next()getInt(col)getShort(col)getNumeric(col)getDouble(col) getFloat(col)getString(col)getDate(col)getTime(col)getTimestamp(col)wasNull()setText(s)append(s)close()

SQLException

getSQLState()getErrorCode()getNextExcetion()

Driver

Connection Statement ResultSet ResultSetMetaData

getColumnCount()getColumnName(i)getColumnLabel(i)getColumnDisplaySize(i)

DatabaseMetaData

getTables(…)…

PreparedStatement

…setXxxx(n, hvar)clearParameters()

getConnection (url, user, psw)

DriverManagerClass

CallableStatement

registerOutputParameterexecute()...

getConnection (url, user, psw)

DataSource

Helia / Martti Laiho, 1998-2000

SQL Query

String s;float n;...String query = "SELECT COF_NAME, PRICE FROM COFFEES";ResultSet rs = stmt.executeQuery(query);while (rs.next()) { s = rs.getString("COF_NAME"); n = rs.getFloat("PRICE"); System.out.println(s + " " + n);}rs.close;

COF_NAME PRICE

sn

rs.next()

rs.getString()

rs.getFloat()

Helia / Martti Laiho, 1998-2000

SQLQuery Sequence DiagramClientClient DriverManagerDriverManager

ConnectionConnection

StatementStatement

ResultSetResultSet

getConnection

createStatement

next

getString

getInt

...

close

close

close

executeQuery

adapted from Orfali & Harkey

{ [ Until next returns false ] }

Helia / Martti Laiho, 1998-2000

Invoking a Stored ProcedureClientClient DriverManagerDriverManager

ConnectionConnection

CallableStatementCallable

Statement

getConnection

prepareCall

getString

getInt

...

close

close

execute

...

adapted from Orfali & Harkey

parameters marked in theprocedures call by ? placeholdersare identified by the correspondingorder numbers 1, 2, .. of the placeholders

registerOutputParameter

Helia / Martti Laiho, 1998-2000

JDBC Escape Syntax

call {call proc (arg1, …) }

?=call {?= call proc (arg1, …) }

d {d ‘yyyy-mm-dd’}

escape {escape ‘%’}

fn {fn function (arg1, …) }

oj {oj outer-join }

t {t ‘hh:mm:ss’}

ts {ts ‘yyyy-mm-dd hh:mm:ss.fffff’}

Helia / Martti Laiho, 1998-2000

Transactions

Default: AutoCommit

Isolation Levels:0 TRANSACTION_NONE1 TRANSACTION_READ_UNCOMMITTED2 TRANSACTION_READ_COMMITTED3 TRANSACTION_REAPEATABLE_READ4 TRANSACTION_SERIALIZABLE

Methods:con.setAutoCommit(false);level = con.getTransactionIsolation();con.setTransactionIsolation(level);

con.commit();con.rollback();

Helia / Martti Laiho, 1998-2000

Exception handling

try { jdbc method call ...}catch (SQLException ex) { System.out.println (”\nSQLException:"); while (ex != null) { System.out.println (”SQLState: "+ex.getSQLState()); System.out.println (”Message: "+ ex.getMessage()); System.out.println (”Vendor: "+ ex.getErrorCode()); ex = ex.getNextException(); }}catch (java.lang.Exception ex) { System.out.println("Exception: " + ex); ex.printStackTrace ();}

- adapted from Core JAVA Vol II ch 4 p 206

Helia / Martti Laiho, 1998-2000

JDBC 2.0 API

• JDBC 2.0 Core API (java.sql) – Scrollable ResultSet – Updating by ResultSet– Batch Updates– New SQL-99 datatypes

• JDBC 2.0 Standard Extension API (javax.sql)

Helia / Martti Laiho, 1998-2000

Scrollable ResultSet

• Resultset types– TYPE_FORWARD_ONLY (~JDBC 1.0)– TYPE_SCROLL_INSENSITIVE– TYPE_SCROLL_SENSITIVE

• Methods– beforeFirst() (initially)– first()– next() (JDBC 1.0)– previous()– last()– afterLast()– absolute (n | -n)– relative (n | -n)– getRow()– isFirst() , isLast() , isBeforeFirst() , isAfterLast() – moveToInsertRow(), moveToCurrentRow()

Helia / Martti Laiho, 1998-2000

Updatable ResultSet

• Updatable– CONCUR_READ_ONLY (~JDBC 1.0)– CONCUR_UPDATABLE

• Methods – updateXXX(column, value)– …

– updateRow() or cancelRowUpdates()

Helia / Martti Laiho, 1998-2000

Inserting a new row

• InsertRow processing:– moveToInsertRow()– updateXXX( , ) ….– insertRow()

– moveToCurrentRow()

updateable row

“Current row”

“InsertRow buffer”

moveToInsertRow()

moveToCurrentRow()

InsertRow()

ResultSet:

Helia / Martti Laiho, 1998-2000

Deleting a Row

• Positioning in the ResultSet and deleting:– <move method>– deleteRow()

• Note: – drivers handle deletions differently

Helia / Martti Laiho, 1998-2000

Refreshing the row

• Applies only to Cursor type:– TYPE_SCROLL_SENSITIVE

• method– refreshRow()

Helia / Martti Laiho, 1998-2000

Batch Updates

• Methods– addBatch(“….”)

– …– executeBatch();

• BatchUpdateException

Helia / Martti Laiho, 1998-2000

SQL-1999 Datatypes

• BLOB - binary large objects

• CLOB - character large objects

• SQL Array - of any SQL scalar datatype• SQL structured type - User Defined Type UDT

• SQL REF - identifier

Helia / Martti Laiho, 1998-2000

JDBC 2.0 Standard Extension API

• JDBC 2.0 Standard Extension API i.e. Optional Package API– in javax.sql

– JavaBeans: Rowsets– JNDI for naming and directory interface– Connection Pooling– Distributed Transactions: 2PC by Java Transaction API

(JTA)