Helia / Martti Laiho, 1998-2000 JDBC Java Database Connection.
-
Upload
alonzo-yarnell -
Category
Documents
-
view
234 -
download
0
Transcript of Helia / Martti Laiho, 1998-2000 JDBC Java 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