using jdbc to access the database

35
16 Copyright © 2004, Oracle. All rights reserved. Using JDBC to Access the Database

Upload: masao

Post on 13-Jan-2016

56 views

Category:

Documents


1 download

DESCRIPTION

Using JDBC to Access the Database. Objectives. After completing this lesson, you should be able to do the following: Describe how Java applications connect to the database Describe how Java database functionality is supported by the Oracle database Load and register a JDBC driver - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Using JDBC to  Access  the Database

16Copyright © 2004, Oracle. All rights reserved.

Using JDBC to Access the Database

Page 2: Using JDBC to  Access  the Database

16-2 Copyright © 2004, Oracle. All rights reserved.

Objectives

After completing this lesson, you should be able to do the following:

• Describe how Java applications connect to the database

• Describe how Java database functionality is supported by the Oracle database

• Load and register a JDBC driver

• Connect to an Oracle database

• Follow the steps to execute a simple SELECT statement

• Map simple Oracle database types to Java types

Page 3: Using JDBC to  Access  the Database

16-3 Copyright © 2004, Oracle. All rights reserved.

Java, J2EE, and Oracle 10g

Oracledatabase

Web serverClient

Application server

PresentationBusiness

logic

Data

OracleApplication Server 10g

J2EE Certified Environment

JDBC

Page 4: Using JDBC to  Access  the Database

16-4 Copyright © 2004, Oracle. All rights reserved.

Client application or applet

Connecting to a Database with Java

Client applications, JSPs, and servlets use JDBC.

JDBC Relational DB

Page 5: Using JDBC to  Access  the Database

16-5 Copyright © 2004, Oracle. All rights reserved.

• JDBC is a standard interface for connecting to relational databases from Java.– The JDBC API includes Core API Package in

java.sql.– JDBC 2.0 API includes Optional Package API in

javax.sql.– JDBC 3.0 API includes the Core API and Optional

Package API

• Include the Oracle JDBC driver archive file in the CLASSPATH.

• The JDBC class library is part of the Java 2, Standard Edition (J2SE).

What Is JDBC?

Page 6: Using JDBC to  Access  the Database

16-6 Copyright © 2004, Oracle. All rights reserved.

// Standard packages

import java.sql.*;

import java.math.*; // optional

// Oracle extension to JDBC packages

import oracle.jdbc.*;

import oracle.sql.*;

Preparing the Environment

• Set the CLASSPATH:

• Import JDBC packages:

[Oracle Home]\jdbc\lib\classes12.jar

Page 7: Using JDBC to  Access  the Database

16-8 Copyright © 2004, Oracle. All rights reserved.

Steps for Using JDBC to ExecuteSQL Statements

1. Register JDBC driver.

4. Execute SQL statement.

4a. Process SELECTstatement.

4b. Process DML or DDL statement.

6. Close connections.5. Process query results.

3. Create statement object.

2. Obtain a connection.

Page 8: Using JDBC to  Access  the Database

16-9 Copyright © 2004, Oracle. All rights reserved.

Step 1: Registering the Driver

• Register the driver in the code:– DriverManager.registerDriver (new

oracle.jdbc.OracleDriver());– Class.forName

("oracle.jdbc.OracleDriver");

• Register the driver when launching the class:– java –D jdbc.drivers =

oracle.jdbc.OracleDriver <ClassName>;

Page 9: Using JDBC to  Access  the Database

16-10 Copyright © 2004, Oracle. All rights reserved.

Using the package oracle.jdbc.driver, Oracle provides different drivers to establish a connection to the database.

JDBC callsDatabase

commandsDatabase

Connecting to the Database

OracleDriver

• Thin client • OCI• Server-based• …

Page 10: Using JDBC to  Access  the Database

16-11 Copyright © 2004, Oracle. All rights reserved.

Client

Oracle JDBC Drivers: Thin Client Driver

• Is written entirely in Java

• Must be used by applets

Server

Oracle

Applet

JDBC

Thin driver

Page 11: Using JDBC to  Access  the Database

16-12 Copyright © 2004, Oracle. All rights reserved.

Application

JDBC

OCI driver

Oracle JDBC Drivers: OCI Client Drivers

• Is written in C and Java

• Must be installed on the client

Client Server

Oracle ocixxx.dll

Page 12: Using JDBC to  Access  the Database

16-13 Copyright © 2004, Oracle. All rights reserved.

Choosing the Right Driver

Applet

Client application

EJB, servlet(on the middle tier)

Stored procedure

OCIThin

Driver

Thin

Server side

OCI

Thin

Type of Program

Page 13: Using JDBC to  Access  the Database

16-14 Copyright © 2004, Oracle. All rights reserved.

Step 2: Getting a Database Connection

• In JDBC 1.0, use the DriverManager class, which provides overloaded getConnection() methods.– All connection methods require a JDBC URL to

specify the connection details.

• Example:

• Vendors can provide different types of JDBC drivers.

Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@myhost:1521:ORCL", "scott","tiger");

Page 14: Using JDBC to  Access  the Database

16-15 Copyright © 2004, Oracle. All rights reserved.

About JDBC URLs

• JDBC uses a URL-like string. The URL identifies– The JDBC driver to use for the connection– Database connection details, which vary depending

on the driver used

• Example using Oracle Thin JDBC driver:– jdbc:oracle:thin:@myhost:1521:ORCL

jdbc:<subprotocol>:<subname>

jdbc:oracle:<driver>:@<database>

Protocol Database identification

Page 15: Using JDBC to  Access  the Database

16-16 Copyright © 2004, Oracle. All rights reserved.

JDBC URLs with Oracle Drivers

• Oracle Thin driver

• Oracle OCI driver

Syntax: jdbc:oracle:thin:@<host>:<port>:<SID>

Example: "jdbc:oracle:thin:@myhost:1521:orcl"

Syntax: jdbc:oracle:oci:@<tnsname entry>

Example: "jdbc:oracle:oci:@orcl"

Page 16: Using JDBC to  Access  the Database

16-17 Copyright © 2004, Oracle. All rights reserved.

Step 3: Creating a Statement

JDBC statement objects are created from the Connection instance:

• Use the createStatement() method, which provides a context for executing an SQL statement.

• Example:

Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@myhost:1521:ORCL",

"scott","tiger");Statement stmt = conn.createStatement();

Page 17: Using JDBC to  Access  the Database

16-18 Copyright © 2004, Oracle. All rights reserved.

Using the Statement Interface

The Statement interface provides three methods to execute SQL statements:

• Use executeQuery(String sql)for SELECT statements.– Returns a ResultSet object for processing rows

• Use executeUpdate(String sql) for DML or DDL.– Returns an int

• Use execute(String) for any SQL statement.– Returns a boolean value

Page 18: Using JDBC to  Access  the Database

16-19 Copyright © 2004, Oracle. All rights reserved.

Step 4a: Executing a Query

Provide a SQL query string, without semicolon, as an argument to the executeQuery() method.

• Returns a ResultSet object:

Statement stmt = null;ResultSet rset = null; stmt = conn.createStatement(); rset = stmt.executeQuery

("SELECT ename FROM emp");

Page 19: Using JDBC to  Access  the Database

16-20 Copyright © 2004, Oracle. All rights reserved.

The ResultSet Object

• The JDBC driver returns the results of a query in a ResultSet object.

• ResultSet:– Maintains a cursor pointing to its current row of

data– Provides methods to retrieve column values

Page 20: Using JDBC to  Access  the Database

16-21 Copyright © 2004, Oracle. All rights reserved.

Step 4b: Submitting DML Statements

1. Create an empty statement object:

2. Use executeUpdate to execute the statement:

Example:

Statement stmt = conn.createStatement();

int count = stmt.executeUpdate(SQLDMLstatement);

Statement stmt = conn.createStatement();

int rowcount = stmt.executeUpdate

("DELETE FROM order_items

WHERE order_id = 2354");

Page 21: Using JDBC to  Access  the Database

16-22 Copyright © 2004, Oracle. All rights reserved.

1. Create an empty statement object:

2. Use executeUpdate to execute the statement:

Example:

Statement stmt = conn.createStatement();

int rowcount = stmt.executeUpdate

("CREATE TABLE temp (col1 NUMBER(5,2),

col2 VARCHAR2(30)");

Step 4b: Submitting DDL Statements

Statement stmt = conn.createStatement();

int count = stmt.executeUpdate(SQLDDLstatement);

Page 22: Using JDBC to  Access  the Database

16-23 Copyright © 2004, Oracle. All rights reserved.

Step 5: Processing the Query Results

The executeQuery() method returns a ResultSet.

• Use the next() method in loop to iterate through rows.

• Use getXXX() methods to obtain column values by column position in query, or column name.

stmt = conn.createStatement();rset = stmt.executeQuery( "SELECT ename FROM emp");while (rset.next()) { System.out.println (rset.getString("ename"));}

Page 23: Using JDBC to  Access  the Database

16-24 Copyright © 2004, Oracle. All rights reserved.

Step 6: Closing Connections

Explicitly close a Connection, Statement, and ResultSet object to release resources that are no longer needed.

• Call their respective close() methods:Connection conn = ...; Statement stmt = ...;ResultSet rset = stmt.executeQuery( "SELECT ename FROM emp");...// clean uprset.close(); stmt.close(); conn.close();...

Page 24: Using JDBC to  Access  the Database

16-25 Copyright © 2004, Oracle. All rights reserved.

A Basic Query Example

import java.sql.*; class TestJdbc { public static void main (String args [ ]) throws SQLException { DriverManager.registerDriver (new oracle.jdbc.OracleDriver()); Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@myHost:1521:ORCL","scott", "tiger"); Statement stmt = conn.createStatement (); ResultSet rset = stmt.executeQuery

("SELECT ename FROM emp"); while (rset.next ()) System.out.println (rset.getString ("ename")); rset.close(); stmt.close(); conn.close(); }}

Page 25: Using JDBC to  Access  the Database

16-26 Copyright © 2004, Oracle. All rights reserved.

ResultSet rset = stmt.executeQuery ("SELECT empno, hiredate, job FROM emp");while (rset.next()){int id = rset.getInt(1);Date hiredate = rset.getDate(2); String job = rset.getString(3);

Column Name

empno

hiredate

job

Type

NUMBER

DATE

VARCHAR2

Mapping Database Types to Java Types

ResultSet maps database types to Java types:

Method

getInt()

getDate()

getString()

Page 26: Using JDBC to  Access  the Database

16-28 Copyright © 2004, Oracle. All rights reserved.

1. Create an empty statement object:

2. Use execute to execute the statement:

3. Process the statement accordingly:

boolean isQuery = stmt.execute(SQLstatement);

if (isQuery) { // was a query - process results ResultSet r = stmt.getResultSet(); ...}else { // was an update or DDL - process result int count = stmt.getUpdateCount(); ...}

Handling an Unknown SQL Statement

Statement stmt = conn.createStatement();

Page 27: Using JDBC to  Access  the Database

16-29 Copyright © 2004, Oracle. All rights reserved.

• SQL statements can throw a java.sql.SQLException.

• Use standard Java error handling methods.

Handling Exceptions

try { rset = stmt.executeQuery("SELECT empno,

ename FROM emp");} catch (java.sql.SQLException e) { ... /* handle SQL errors */ }

...finally { // clean up try { if (rset != null) rset.close(); }

catch (Exception e) { ... /* handle closing errors */ }

...

Page 28: Using JDBC to  Access  the Database

16-30 Copyright © 2004, Oracle. All rights reserved.

Managing Transactions

• By default, connections are in autocommit mode.

• Use conn.setAutoCommit(false)to turn autocommit off.

• To control transactions when you are not in autocommit mode, use:– conn.commit(): Commit a transaction– conn.rollback(): Roll back a transaction

• Closing a connection commits the transaction even with the autocommit off option.

Page 29: Using JDBC to  Access  the Database

16-31 Copyright © 2004, Oracle. All rights reserved.

The PreparedStatement Object

• A PreparedStatement prevents reparsing of SQL statements.

• Use this object for statements that you want to execute more than once.

• A PreparedStatement can contain variables that you supply each time you execute the statement.

Page 30: Using JDBC to  Access  the Database

16-32 Copyright © 2004, Oracle. All rights reserved.

PreparedStatement pstmt = conn.prepareStatement("UPDATE emp SET ename = ? WHERE empno = ?");

PreparedStatement pstmt = conn.prepareStatement("SELECT ename FROM emp WHERE empno = ?");

How to Create a PreparedStatement

1. Register the driver and create the database connection.

2. Create the PreparedStatement, identifying variables with a question mark (?):

Page 31: Using JDBC to  Access  the Database

16-33 Copyright © 2004, Oracle. All rights reserved.

1. Supply values for the variables:

2. Execute the statement:

pstmt.setXXX(index, value);

pstmt.executeQuery();

pstmt.executeUpdate();

int empNo = 3521;PreparedStatement pstmt = conn.prepareStatement("UPDATE emp SET ename = ? WHERE empno = ? ");pstmt.setString(1, "DURAND");pstmt.setInt(2, empNo);pstmt.executeUpdate();

How to Execute a PreparedStatement

Page 32: Using JDBC to  Access  the Database

16-34 Copyright © 2004, Oracle. All rights reserved.

Maximize Database Access

• Use connection pooling to minimize the operation costs of creating and closing sessions.

• Use explicit data source declaration for physical reference to the database.

• Use the getConnection() method to obtain a logical connection instance.

Page 33: Using JDBC to  Access  the Database

16-35 Copyright © 2004, Oracle. All rights reserved.

Database

Database commands

Data source

ConnectionPoolDataSource

Java servlet

Middle-tier server code

Middle tier

Connection Pooling

JDBCdriver

Page 34: Using JDBC to  Access  the Database

16-38 Copyright © 2004, Oracle. All rights reserved.

Summary

In this lesson, you should have learned the following:

• JDBC provides database connectivity for various Java constructs, including servlets and client applications.

• JDBC is a standard Java interface and part of the J2SE.

• The steps for using SQL statements in Java are Register, Connect, Submit, and Close.

• SQL statements can throw exceptions.

• You can control default transactions behavior.

Page 35: Using JDBC to  Access  the Database

16-39 Copyright © 2004, Oracle. All rights reserved.

Practice 16: Overview

This practice covers:

• Setting up the Java environment for JDBC

• Adding JDBC components to query the database

• Populating the OrderEntryFrame with Customers from the database