Programming in Java - The College of Saint Rose

Download Report

Transcript Programming in Java - The College of Saint Rose

Connecting to
Oracle using Java
March 10, 2009
David Goldschmidt, Ph.D.
[email protected]
JDBC


JDBC is a platform-independent Java API for
executing SQL statements
Use JDBC to:
JDBC
Connect to a database
 Send SQL statements
 Receive results


i.e. rows of data
Add or update existing rows of data
 Call PL/SQL procedures, functions, etc.

database
JDBC Drivers

Before connecting to a database,
a driver class must first be loaded into
the Java Virtual Machine (or JVM)

A driver is simply a class in Java
MySQL:
 Oracle:


"com.mysql.jdbc.Driver"
"oracle.jdbc.driver.OracleDriver"
Oracle driver is located within the ojdbc14.jar
JAR file of the Oracle distribution
JDBC Drivers

Sun defines four categories of JDBC drivers:
1.
2.
3.
4.
JDBC bridge driver – uses native code to connect a
Java client to a third-party API (e.g. JDBC-ODBC)
Native API (part Java driver) – wraps native code with
Java classes (e.g. Oracle Call Interface (OCI ) driver)
Network protocol (pure Java driver) – Java classes
communicate via a network protocol to a middletier server, which communicates with the database
Native protocol (pure Java driver) – Java classes
communicate directly with the database (e.g. Thin)
JDBC Drivers
JDBC-ODBC
driver
ODBC
driver
Oracle Call
Interface
(OCI)
Oracle Listener
Oracle RDBMS
JDBC OCI
driver
JDBC Thin
driver
JDBC Connection Strings

Connect to a database using its connect string
(i.e. its Connection URL):
Access:
 MySQL:
 Oracle:


"jdbc:odbc:dataSource"
"jdbc:mysql://hostname/dbname"
"jdbc:oracle:thin:@hostname:port#:SID"
Use a Connection object:
Connection connection =
DriverManager.getConnection( dbConnectURL );
JDBC Interfaces
Driver
Connection
Connection
Statement
Statement
Statement
Statement
ResultSet
ResultSet
ResultSet
ResultSet
Using JDBC
Building Statements

Statement createStatement()
 Prepare
a query without parameters
 Result set is read-only and forward-only
 For repeated queries, gain performance
speedup by using prepareStatement()
instead
Building Statements

PreparedStatement
prepareStatement( String sql )
 Prepare
a parameterized query
 Result set is read-only and forward-only
Building Statements

CallableStatement
prepareCall( String sql )
 Prepare
a call to a stored procedure
 Register
any OUT (or IN OUT) parameters
 Set any IN (or IN OUT) parameters
 Results
are read-only and forward-only
Processing Statements

boolean execute( String sql )
 Use
this method to execute DDL statements
and stored procedures
 Return value indicates whether
a ResultSet object is available
Processing Statements

ResultSet executeQuery( String sql )
 Use
this method to execute DDL statements
you expect to receive results from
 i.e. Use for your SELECT statements
Processing Statements

int executeUpdate( String sql )
 Use
this method to execute INSERT, UPDATE,
and DELETE statements
 Return value is the number of rows affected
Processing Results

Default ResultSet behavior
is read-only and forward-only
ResultSet
 Change
default using resultSetType and
resultSetConcurrency parameters
ResultSet
 For resultSetType:
 TYPE_FORWARD_ONLY
 TYPE_SCROLL_INSENSITIVE
 TYPE_SCROLL_SENSITIVE
scrolling uses a client-side memory cache
sensitivity refers to whether
database changes made while
the ResultSet object is open
are visible
Processing Results
 For resultSetConcurrency:
ResultSet
 CONCUR_READ_ONLY
 CONCUR_UPDATABLE
 To
implement updateability, all queries request
the ROWID for each row
ROWID is
a proprietary SQL data type
that uniquely identifies each row of
the database
Sensitivity and Updateability

A scroll-sensitive ResultSet must:
Perform SELECT against only one table
 Explicitly specify columns (i.e. not SELECT *)
 Not use an ORDER BY clause


An updateable ResultSet must also:

Include all nonnullable columns (for INSERT)
Batching

Improve performance by combining
multiple SQL statements into a batch
Disable auto-commit
 Oracle supports PreparedStatement batching only
 Call addBatch() instead of executeUpdate()


Repeat!
Then call executeBatch() and commit()
 Tune frequency of commits
 Use clearBatch() to cancel your batch
