Sie sind auf Seite 1von 27

USANDO JDBC PARA ACCEDER A UNA BASE DE DATOS

Java, J2EE, and Oracle


Client Web server Presentation Application server Data

Business logic

Oracle Application Server J2EE Certified Environment

Oracle Database

JDBC

CONECTNDOSE A UNA BASE DE DATOS CON JAVA


La Java Database Connectivity (JDBC) API contiene clases e interfaces Java que proveen acceso de bajo nivel a las Bases de Datos

Client application

JDBC

Relational DB

QUE ES JDBC?
JDBC es una interface estndar para conectarse a una base de datos relacional desde Java.
El paquete java.sql es el corazn de la API JDBC 2.0 El paquete javax.sql es la API de Extensin Estndar JDBC 2.0 (opcional) JDBC 4.0 API incluye la Core API y la Optional Package API

El paquete java.sql contiene un conjunto de interfaces que especifican la API JDBC.

La librera de clases JDBC es parte de Java 2, Standard Edition (J2SE).

QUE ES JDBC?
Los vendedores de Base de Datos implementan estas interfaces de diferentes manera. Usando JDBC, podemos escribir cdigo que:
Se conecte a uno o mas servidores de datos Ejecutar alguna sentencia SQL Obtener un conjunto de resultados de manera que podamos navegar a travs del resultado de una consulta Obtener metadata desde el servidor de datos

Cada vendedor de base de datos provee uno o mas drivers JDBC.

PASOS PARA EJECUTAR UNA SENTENCIA SQL CON JDBC


1. Registrar JDBC driver 2. Obtener una conexin 3. Crear un objeto statement 4. Ejecutar sentencias SQL
4a. Procesar sentencias

5. Procesar resultados de consulta

SELECT
4b. Process sentencias

DML/ DDL
6. Cerrar conexiones

TRATANDO CON EXCEPCIONES


Todos los mtodos que acceden a la base de datos lanzan la excepcin SQLException si algo va mal.

SQLException tiene un numero de mtodos que podemos llamar para obtener informacin sobre la excepcin:
getMessage():

Retorna un string que describe el error

getErrorCode():

Recupera el cdigo de excepcin especifico al

vendedor.
getSQLState():

Recupera el valor del estado SQL

Paso 1: Registrar el Driver


Registrar el driver en el cdigo: DriverManager.registerDriver (new oracle.jdbc.OracleDriver()); //una forma Class.forName ("oracle.jdbc.OracleDriver");//otra forma

Paso 2: Obteniendo Una Conexin a DB


Use la clase DriverManager para crear una conexin llamando al mtodo sobrecargado getConnection(). Requieren un JDBC URL para especificar los detalles de conexin.
Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@myhost:1521:ORCL", "scott","tiger");
//--:--:tipo de driver:direccion IP:puerto:instancia BD,_,_

JDBC 2.0 y versiones posteriores proveen otros mtodos para obtener un objeto conexin (JNDI).

Acerca de JDBC URLs


JDBC usa un URL para identificar la conexin a la Base de datos. El URL identifica:
El driver JDBC a usar para la conexin Detalles de la conexin a la Database, lo cual varia dependiendo del driver usado.

jdbc:<subprotocol>:<subname>
Protocol Database Identification

jdbc:oracle:<driver>:@<database>
Ejemplo usando Oracle Thin JDBC driver:
jdbc:oracle:thin:@myhost:1521:ORCL

Paso 3: Creando un Statement


Objetos JDBC Statement son creados desde la instancia de una clase Connection : Use el mtodo createStatement(), el cual provee un contexto para ejecutar una sentencia SQL. Ejemplo:
//Crear coneccion

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


//Crear objeto statement

Statement stmt = conn.createStatement();

Paso 4: Ejecutando una Sentencia SQL


1. Register JDBC driver 2. Obtain a connection 3. Create statement object

4. Execute SQL statement 4a. Execute SELECT statement 4b. Submit DML/ DDL statement 6. Close unneeded objects

5. Process query results

USANDO LA INTERFASE Statement


La interfase Statement provee tres mtodos para ejecutar sentencias SQL : executeQuery(String sql) para sentencias SELECT
Retorna un objeto ResultSet para el procesamiento de filas

executeUpdate(String sql) para sentencias DML/DDL.


Retorna un valor int, indicando el numero de filas afectadas por la sentencia DML, de lo contrario es 0 para una sentencia DDL

execute(String) para alguna sentencia SQL.


Retorna un valor boolean de true si la sentencia retorna un ResultSet, de lo contrario retorna una valor de false

Paso 4a: Ejecutando una Consulta


Proveer una cadena de consulta SQL, sin punto y coma, como argumento al mtodo executeQuery(). Retorna un objeto ResultSet .
Statement stmt = null; ResultSet rset = null; stmt = conn.createStatement(); rset = stmt.executeQuery ("SELECT ename FROM emp");

EL OBJETO RESULTSET
El driver JDBC retorna el resultado de una consulta en un objeto ResultSet. ResultSet: Es una tabla de data que representa un set de resultados provenientes de la base de datos Mantiene un cursor apuntando a la fila actual de la data Provee mtodos para recuperar valores de columnas.

4b: Enviando Sentencias DML


1. Crear un objeto statement vacio.
Statement stmt = conn.createStatement();

2. Use executeUpdate para ejecutar la sentencia.


int count = stmt.executeUpdate(SQLDMLstatement);

Ejemplo:
Statement stmt = conn.createStatement(); int rowcount = stmt.executeUpdate ("DELETE FROM order_items WHERE order_id = 2354");

Paso 4b: Enviando Sentencias DDL


1. Crear un objeto statement vaco .
Statement stmt = conn.createStatement();

2. Use executeUpdate para ejecutar el statement.


int count = stmt.executeUpdate(SQLDDLstatement);

Eejemplo:
Statement stmt = conn.createStatement(); int rowcount = stmt.executeUpdate ("CREATE TABLE temp (col1 NUMBER(5,2), col2 VARCHAR2(30)");

Paso 5: Procesando los Resultados de la Consulta


El mtodo executeQuery() retorna un ResultSet Use el mtodo next() en un bucle para iterar a travs de las filas. Use mtodos getXXX() para obtener valores de columna, bien por la posicin de la columna en la consulta, o por nombre de columna.
stmt = conn.createStatement(); rset = stmt.executeQuery( "SELECT ename FROM emp"); while (rset.next()) { System.out.println (rset.getString("ename")); }

UN EJEMPLO BSICO DE CONSULTA


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(); } }

Paso 6: Cerrando Conexiones


Explcitamente cierre un Objeto Connection, Statement, y ResultSet para liberar recursos que ya no son necesarios . Llamar a sus respectivos mtodos close().
Connection conn = ...; Statement stmt = ...; ResultSet rset = stmt.executeQuery( "SELECT ename FROM emp"); ... // clean up rset.close(); stmt.close(); conn.close(); ...

MAPEANDO DATABASE TYPES A JAVA TYPES


ResultSet mapean database types a Java types.
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 Method getInt() getDate() getString()

MANEJANDO EXCEPCIONES
Sentencias SQL pueden java.sql.SQLException.
Use mtodos manejadores de error estndar Java
try

lanzar

una

excepcin

{ 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 */ } ...

EL OBJETO PreparedStatement
Previene el reparsing de sentencias SQL . Use este objeto para sentencias que queremos ejecutar mas de una vez.

Puede contener variables que podemos proveer con un valor cada vez que ejecutemos la sentencia

COMO CREAR UN PreparedStatement


1. Registrar el driver y crear una conexin a la BD.
2. Crear el PreparedStatement, identificando las variables con el smbolo : ?
PreparedStatement pstmt = conn.prepareStatement ("UPDATE emp SET ename = ? WHERE empno = ?"); pstmt.setString(1,PEREZ); pstmt.setint(2,105); PreparedStatement pstmt = conn.prepareStatement ("SELECT ename FROM emp WHERE empno = ?");

COMO EJECUTAR UN PreparedStatement


1. Proporcionar valores a las variables.
pstmt.setXXX(index, value);

2. Ejecutar la sentencia.
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();

MAXIMIZAR ACCESO A BASE DE DATOS


Use un pool de conexiones para minimizar el costo de operacin de crear y cerrar sesiones. Use una declaracin DataSource explicita para referenciar fsicamente a la base de datos Use el mtodo getConnection() para obtener una instancia de una conexin lgica

POOL DE CONEXIONES
Middle tier

Java servlet Data source

Middle-tier server code


ConnectionPoolDataSource JDBC driver Database commands Database

Das könnte Ihnen auch gefallen