Você está na página 1de 108

Curso Bsico de JDBC.

Acerca de:
En la compilacin de esta obra se utilizaron libros conocidos en el
ambiente Java, grficas, esquemas, figuras de sitios de internet,
conocimiento adquirido en los cursos oficiales de la tecnologa Java. En
ningn momento se intenta violar los derechos de autor tomando en
cuenta que el conocimiento es universal y por lo tanto se puede
desarrollar una idea a partir de otra.
La intencin de publicar este material en la red es compartir el esfuerzo
realizado y que otras personas puedan usar y tomar como base el
material aqu presentado para crear y desarrollar un material mucho ms
completo que pueda servir para divulgar el conocimiento.

CONTENIDO
Modulo 01: Introduccin al JDBC.

Modulo 02: Prctica de Laboratorio.


Modulo 03: JDBC Avanzado.
Modulo 04: Prctica de Laboratorio.

Curso JDBC.

Modulo 01
Introduccin al JDBC.

Objetivos.
Despus de completar este modulo, el participante ser capaz de:

Conocer las caractersticas principales de la tecnologa Java.


Explicar los pasos a seguir para conectarse a una Base de Datos (BD).
Conocer los mtodos principales de la API de JDBC.
Identificar la manipulacin de las sentencias SQL mediante programas
Java.
Identificar el manejo de las excepciones con JDBC.

Contenido.

Introduccin.
Evolucin de JDBC.
Arquitectura del API JDBC.
Descripcin general del API JDBC.
Drivers JDBC.
Qu necesitamos para trabajar con JDBC?.
Conexin de la Base de Datos.
Conexin a JDBC.
Cargar el controlador JDBC.
Establecer una conexin JDBC.
TestConexion.java
Creacin de sentencias.
7

Contenido.

Objetos Statement.
Sentencia executeUpdate().
Insertar.java
Sentencia executeQuery()
Consultar.java
Tipos de Datos y Conversiones.
ResultSetMetaData.
TestResultSetMetaData.java
DatabaseMetaData.
TestMetaData.java

Introduccin.
JDBC es un conjunto de clases e interfaces Java que permiten la
manipulacin de sentencias SQL de una fuente de datos (base de
datos).
La interface Java (API de JDBC) proporciona a las aplicaciones Java
un mecanismo estndar e independiente de la plataforma para el
acceso a la mayora de las bases de datos existentes.
La API de JDBC define un conjunto de clases e interfaces que
proporcionan toda la funcionalidad que el acceso a base de datos
requiere, tal como la ejecucin de consultas SQL o el tratamiento
de los resultados.
Cada fabricante de base de datos se encargar de proporcionar un
driver JDBC especfico para su base de datos.

Introduccin.
Las actividades bsicas de programacin que vamos a utilizar en
JDBC:
1

Conectarse a una fuente de datos, como una base de datos.

Enviar Querys y Updates a la base de datos.

Recuperar y procesar los resultados obtenidos de la base de datos en


respuesta al Query obtenido.
Todo el conjunto de clases e
interfaces que constituyen JDBC
se encuentran dentro del paquete
java.sql principalmente pero tambin existe el
paquete javax.sql.
10

Componentes JDBC.
El producto JDBC incluye 4 componentes:
Java Standard Edition (Java SE)

java.sql
javax.sql

El API de
JDBC

JDBC Driver
Manager

Conecta aplicaciones Java con el Driver Correcto


de JDBC. Se puede realizar por conexin directa
o va DataSource.

JDBC Test
Suite

Comprueba si un Driver cumple con los requisitos


JDBC.

Puente
JDBC-OBDC

Permite que se puedan utilizar los Drivers ODBC


como si fueran de tipo JDBC.

Java Enterprise Edition (Java EE)

11

Descripcin general del API JDBC.


Las interfaces principales de la API JDBC que se encuentran en la
librera java.sql:
DriverManager

Conexin

Connection
DatabaseMetaData

Statement

Comandos

CallableStatement
PreparedStatement

Resultados

ResultSet
ResultSetMetaData

Proporciona mtodos para cargar drivers.


Representa una conexin a la base de datos.
Informacin sobre la bd en general.
Permite enviar sentencias SQL a la bd.
Para llamadas a procedimientos almacenados.
Sentencias sql precompiladas.
Renglones de una sentencia ejecutada.
Informacin propiedades de un ResultSet.
12

Tipos de drivers JDBC.


Un driver JDBC es una implementacin de varias interfaces
especificadas en los paquetes java.sql y javax.sql.
Es una capa de software intermediario que traduce las llamadas
JDBC a las APIs especficas de cada vendedor.
Existen cuatro tipos de controladores JDBC, cada uno numerado
del 1 al 4 en orden creciente en relacin a la independencia de la
plataforma, desempeo, etc.
Driver tipo 1: utilizan una API nativa estndar.
Driver tipo 2: utilizan una API nativa de la base de datos.

Driver tipo 3: utiliza un servidor remoto con una API genrica.


Driver tipo 4: es el mtodo ms eficiente de acceso a base de datos.

13

Driver Tipo 1: JDBC-ODBC.


El driver JDBC-ODBC es parte de la plataforma Java. No es un
driver 100% Java.
Traduce las llamadas a JDBC a invocaciones ODBC a travs de
libreras ODBC del sistema operativo.
Cdigo
Java

Driver
JDBC-ODBC

API
JDBC

Se conecta a la
base de datos

Driver
JDBC
Traduce cdigo Java
en llamadas ODBC
14

Driver Tipo 2: Native API partly-java.


Son drivers escritos parte en Java y parte en cdigo nativo. El
driver usa una librera cliente nativa, especfica de la base de datos
con la que quiere conectarse. No es un driver 100% Java.
La aplicacin Java hace una llamada a la base de datos a travs del
driver JDBC, el driver traduce la peticin, en invocaciones a la API
del fabricante de la base de datos.
Es un driver que usa protocolos de acceso
a datos optimizados por el fabricante
Cdigo
Java

Driver
JDBC
Cdigo Java
y Nativo

Cliente
Nativo
Librera nativa especifica del
proveedor de base de datos
15

Driver Tipo 3: JDBC-Net pure Java.


Son drivers que usan un cliente Java puro (cliente JDBC) que se
comunica con un middleware server (servidor JDBC) usando un
protocolo independiente de la base de datos (TCP/IP).
Convierte las llamadas en un protocolo (por ejemplo TCP/IP) que
puede utilizarse para interactuar con la base de datos.
Cdigo
Java

Cliente JDBC
Driver
JDBC
TCP/IP
Servidor de
acceso a bd
Servidor JDBC

Driver
Tipo 1/2
Protocolo especfico
del proveedor
16

Driver Tipo 4: Native-Protocol Pure Java.


Son drivers suministrados por el
fabricante de la base de datos y su
finalidad es convertir llamadas JDBC
en un protocolo de red (usando
sockets) comprendido por la base de
datos.
Es el mtodo ms eficiente de acceso
a base de datos.
Cdigo
Java

Es la mejor solucin y
est escrito totalmente
en Java (100%)

Driver
JDBC
Cdigo Java 100%

17

Uso de JDBC en aplicaciones Java.


Aplicacin Java
getConnection()

DriverManager
Crea una conexin nueva.
Proporciona el servicio
bsico para manejar
conjunto de drivers JDBC.
Requiere que la aplicacin
cargue el driver usando
una URL va hardcode.
Connection: representa una
conexin a la BD. Es creada por
via directa (DriverManager) o
utilizando DataSource.

getConnection()

Connection
Driver
JDBC

DataSource
Toma una conexin del pool.
Abstrae los detalles de
acceso y configuracin. Es
el mtodo preferido de
acceso en JEE.

Driver JDBC: proporcionado por


el fabricante de la base de
datos. Nos conecta a la base de
datos.
18

Pasos para utilizar JDBC en aplicaciones Java.


Cargar/Registrar
el Driver JDBC

DriverManager.getConnection
(url,usr,pwd);

Obtener la
conexin

conn.createStatement();
conn.prepareStatement(sql);
conn.prepareCall(sql);

Crear el comando
SQL

Ejecutar el
comando SQL

Class.forName(driver);

stmt.executeQuery();
stmt.executeUpdate();

(create, alter, drop) DDL

(select)

(insert, update, delete) DML

stmt.close();
conn.close();

Liberar recursos

Procesar los
resultados

4.1

5
19

Cargar el driver JDBC.


Para conectarnos a una base de datos a travs de JDBC desde una
aplicacin Java, lo primero que necesitamos es cargar el driver.
Facilitado por
La sintaxis para cargar el driver es:
el fabricante

Class.forName("NombreDelDriver" );

Por ejemplo, si vamos a emplear el driver el puente JDBC-ODBC


para conectarnos a una base de datos MS Access, entonces el
cdigo sera:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver" );

20

Cargar el driver JDBC.


En nuestro curso utilizaremos el driver nativo de MySQLConector/J
para acceder a MySQL. Por lo tanto para cargar el driver
tendramos que escribir en nuestro cdigo Java:
Class.forName(" com.mysql.jdbc.Driver " );

Llamando a Class.forName la aplicacin Java carga el driver JDBC y


entonces ya nos podemos conectar con la base de datos
invocando el mtodo DriverManager.getConnection.

21

Obtener la conexin.
Para conectarnos a la base de datos una vez cargado el driver,
utilizaremos el mtodo getConnection que a su vez define una URL
que indicar la ubicacin de la base de datos:
Usuario para acceder
a la base de datos

Clave de
acceso

Connection conn = DriverManager.getConnection(url,usr,pwd);

jdbc:<subprotocolo>:<subnombre>
Es el
protocolo

Identifica el driver
de la bd

Indica el nombre y en donde


se encuentra la BD

22

Obtener la conexin.
Por ejemplo para establecer una conexin con MS Access
podriamos escribir:
Connection conn;
String url = "jdbc:objc:NombreBaseDatos";
conn = DriverManager.getConnection(url, "", "");

Y para obtener la conexin con la base de datos MySQL:


Connection conn;
String url = "jdbc:mysql://localhost/NombreBaseDatos";
conn = DriverManager.getConnection(url, "", "");

23

Obtener la conexin.
Ejemplo:

package cursojdbc;
import java.sql.*;

Los programas deben declarar el uso de


este paquete.
Constantes de configuracin para
el acceso a la bd va hardcode.

public class TestConexion {


static String bd = "MI_BIBLIOTECA";
static String login = "root";
static String password = "admin";
static String url = "jdbc:mysql://localhost/" + bd;

Carga el driver en
memoria e intenta
realizar la conexin
a la bd.

public static void main(String[] args) {


try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn =
DriverManager.getConnection(url, login, password);

1/2
24

Obtener la conexin.
Ejemplo:

if (conn != null) {
System.out.println("Conexin a la bd " + url + "....ok!!");
conn.close();
}
} catch (ClassNotFoundException cnfe) {
Si se logra la
System.out.println("Driver JDBC no encontrado");
conexin se
cnfe.printStackTrace();
despliega un
} catch (SQLException sqle) {
mensaje de
System.out.println("Error al conectarse a la BD");
usuario.
sqle.printStackTrace();
En caso
} catch (Exception e) {
contrario
System.out.println("Error general");
lanza una
e.printStackTrace();
excepcin.
}
2/2
25

Crear el comando SQL.


Ya que hemos establecido una conexin con la base de datos
usando el mtodo getConnection de DriverManager, ahora
podemos crear sentencias SQL utilizando la interface Statement
que provee mtodos para realizar esas tareas. Entonces tenemos
que escribir en nuestro cdigo Java:
Statement stmt = conn.createStatement();

Ahora para que podamos utilizar las sentencias UPDATE, INSERT,


DELETE,SELECT tenemos que utilizar los mtodos:
executeUpdate

Retorna un nmero entero indicando la cantidad de


registros afectados (UPDATE, INSERT,DELETE).

executeQuery

Regresa un conjunto de resultados que se almacenan


en un objeto ResultSet.
26

Ejecutar el comando SQL: executeUpdate.


Utilizamos el mtodo executeUpdate para sentencias SQL de tipo
DML que crean, modifican o eliminan datos de las tablas, tambin
lo podemos usar en sentencias de tipo DDL tales como crear,
modificar, borrar tablas.
En general, vamos a utilizar executeUpdate para todo aquello que
no regrese un conjunto de resultados. Por ejemplo:
String cadSQL = (" INSERT INTO autor " +
" VALUES(127,Ral,Oramas );

Observa el uso
de las comillas
simples.

La instruccin SQL debe ser sintcticamente correcta.

Statement stmt = conn.createStatement();


int r = stmt.executeUpdate(cadSQL);

Se crea a partir del


objeto Connection.

El valor de retorno se guarda en una


variable entera.
27

Ejecutar el comando SQL: executeUpdate.


Ejemplo:

package cursojdbc;
import java.sql.*;
public class TestExecuteUpdate {
final static String bd = "MI_BIBLIOTECA";
final static String login = "root";
final static String password = "admin";
final static String url = "jdbc:mysql://localhost/" + bd;
Connection conn;
Statement stmt;
public TestExecuteUpdate() throws SQLException,
ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, login, password);
stmt = conn.createStatement();
}

1/2
28

Ejecutar el comando SQL: executeUpdate.


Ejemplo:

public void operacionesBD() throws SQLException {


int r = 0;
String cadSQL = null;
cadSQL = "INSERT INTO autor VALUES(127,'Peter','Norton')";
r = stmt.executeUpdate(cadSQL);
System.out.println(r + " registro agregado.");
cadSQL = "INSERT INTO autor VALUES(128,'Laura','Lemay')";
r = stmt.executeUpdate(cadSQL);
System.out.println(r + " registro agregado.");
cadSQL = "UPDATE autor SET nombreAutor='Pedro' WHERE
nombreAutor='Peter'";
r = stmt.executeUpdate(cadSQL);
System.out.println(r + " registro modificado.");
1/2
29

Ejecutar el comando SQL: executeUpdate.


Ejemplo:

cadSQL = "DELETE FROM autor WHERE nombreAutor='Pedro'";


r = stmt.executeUpdate(cadSQL);
System.out.println(r + " registro eliminado.");
cadSQL = "DELETE FROM autor WHERE nombreAutor='Laura'";
r = stmt.executeUpdate(cadSQL);
System.out.println(r + " registro eliminado.");
stmt.close();
conn.close();

}
public static void main(String[] args) {
try {
TestExecuteUpdate test = new TestExecuteUpdate();
test.operacionesBD();
} catch (SQLException sqle) {
System.out.println(sqle);
} catch (Exception e) {
System.out.println(e);
}

1/2
30

Ejecutar el comando SQL: executeQuery.


Cuando se ejecutan sentencias SELECT usando el mtodo
executeQuery, se obtiene como respuesta un conjunto de
resultados, que en Java es representado por un objeto ResultSet
ResultSet rs = stmt.executeQuery(SELECT * FROM autor);

Regresa los resultados


en el objeto ResultSet.

AutorID

Nombre

Apellido

Harvey

Deitel

Paul

Deitel

Jackie

Barker

Paul

Sanghera

Ivor

Horntons

Todd

M.Thomas

31

Ejecutar el comando SQL: executeQuery.


El objeto ResultSet controla la recuperacin de los registros.
Representa un cursor (iterador) sobre los resultados:
Movimiento: mtodos next() y previous().
Inicialmente el cursor est posicionado antes del primer registro.

Depende del objeto consulta: cada vez que se realice una consulta
se pierden los resultados.

32

Ejecutar el comando: executeQuery.


Tenemos dos alternativas para acceder a las columnas del
resultado:
rs.getString(nombre); //nombre de la columna
rs.getString(1); //posicin en la consulta

El acceso por posicin es til cuando:


Acceso a una columna derivada, por ejemplo, calcular la media.
Cuando hay columnas con los mismos nombres (join)

Recuperacin de los valores de las columnas:


Mtodos de acceso (getXXX)

33

Ejecutar el comando SQL: executeQuery.


Ejemplo:

package cursojdbc;
import java.sql.*;
public class TestExecuteQuery {
final static String bd = "MI_BIBLIOTECA";
final static String login = "root";
final static String password = "admin";
final static String url = "jdbc:mysql://localhost/" + bd;
Connection conn;
Statement stmt;
public TestExecuteQuery() throws SQLException,
ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, login, password);
stmt = conn.createStatement();
}

1/2
34

Ejecutar el comando SQL: executeQuery.


Ejemplo:

public void operacionesBD() throws SQLException {


ResultSet rs;
Obtiene un objeto ResultSet
String cadSQL = null;
a partir de una cadena SQL.
cadSQL = "SELECT * FROM autor";
rs = stmt.executeQuery(cadSQL);

Navega a travs del


ResultSet utilizando el
mtodo next

while(rs.next()) {
System.out.print("Autor ID: " + rs.getString(1));
System.out.print("\tNombre: " + rs.getString(2));
System.out.print("\t" + rs.getString(3) + "\n");
}
rs.close();
Utilizando los mtodos getXXX obtiene los
stmt.close();
valores de las columnas en el ResultSet. Se
conn.close();
obtiene por el nombre de las columnas o por
su posicin.

1/2
35

Ejecutar el comando SQL: executeQuery.


Ejemplo:

public static void main(String[] args) {


try {
TestExecuteQuery test = new TestExecuteQuery();
test.operacionesBD();
} catch (SQLException sqle) {
System.out.println(sqle);
} catch (Exception e) {
System.out.println(e);
}
} //fin main
}

1/2
36

Tipos de datos y conversiones.


Cuando se lanza un mtodo getXXX sobre un objeto ResultSet, el
driver JDBC convierte el dato que se quiere recuperar a el tipo Java
especificado y entonces devuelve un valor Java adecuado
La conversin de tipos se puede realizar gracias a la clase
java.sql.Types. En esta clase se definen lo que se denominan tipos
de datos JDBC, que se corresponde con los tipos de datos SQL
estndar

37

Tipos de datos y conversiones.


El mapeo o conversin es la siguiente:
Tipos JDBC

Tipos Java

Tipos JDBC

Tipos Java

BIGINT

getLong()

LONGVARCHAR

getString()

BINARY

getBytes()

NUMERIC

getBigDecimal()

BIT

getBoolean()

OTHER

getObject()

CHAR

getString()

REAL

getFloat()

DATE

getDate()

SMALLINT

getShort()

DECIMAL

getBigDecimal()

TIME

getTime()

DOUBLE

getDouble()

DATESTAMP

getTimeStamp()

FLOAT

getDouble()

TINYINT

getByte()

INTEGER

getInt()

VARBINARY

getBytes()

LONGVARBINARY

getBytes()

VARCHAR

getString()
38

Trabajando con metadatos.


Los metadatos son datos
acerca de los datos. Datos
que explican la naturaleza de
otros datos.

Son datos

Datos
Metadatos

Con el acceso a los metadatos podemos conocer la estructura de


la base de datos (no su contenido) y nos permite desarrollar
aplicaciones independientemente del esquema de la base de
datos.
MetaData API

DataBaseMetaData

DriverPropertyInfo

ResultSetMetaData

RowSetMetaData

ParameterMetaData

39

ResultSetMetaData.
Los mtodos de ResultSetMetaData nos permite determinar las
caractersticas de un objeto ResultSet.
Por ejemplo podemos determinar:
El nmero de columnas.

Conjunto de datos
Obtenido en un ResulSet

Informacin sobre una columna, tal como el tipo de


datos, la longitud, la precisin y la posibilidad de
contener nulos.

La indicacin de si una columna es de solo lectura,


etc.

ResultSetMetaData rsmd = rs.getMetaData();


40

ResultSetMetaData.
Ejemplo:

package cursojdbc;
import java.sql.*;
public class MetaData01 {
final static String bd = "MI_BIBLIOTECA";
final static String login = "root";
final static String password = "admin";
final static String url = "jdbc:mysql://localhost/" + bd;
Connection conn;
Statement stmt;
public MetaData01() throws SQLException,
ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, login, password);
stmt = conn.createStatement();
}

1/2
41

ResultSetMetaData.
Ejemplo:

public void desplegarMetaDatosResultSet() throws SQLException {


ResultSet rs = stmt.executeQuery("SELECT * FROM AUTOR");
ResultSetMetaData rsmd = rs.getMetaData();
int nColumnas = rsmd.getColumnCount();
System.out.println("Nombre tabla: " + rsmd.getTableName(1));
System.out.println("La tabla tiene : " + rsmd.getColumnCount() + "
columnas.");
// obtiene los nombres de las columnas y el tipo de dato SQL
asociado
for (int i = 1; i < nColumnas + 1; i++) {
System.out.println("Columna: " + rsmd.getColumnName(i)
+ "\t" + rsmd.getColumnTypeName(i) +
"\t" + rsmd.getPrecision(i));
}
rs.close();
stmt.close();

1/2
42

DatabaseMetaData.
La interface DatabaseMetaData contiene ms de 150 mtodos
para recuperar informacin de un Base de Datos (catlogos,
esquemas, tablas, tipos de tablas, columnas de las tablas,
procedimientos almacenados, vistas etc.) as como informacin
sobre algunas caractersticas del controlador JDBC que estemos
utilizando
Estos mtodos son tiles cuando se escribe aplicaciones genricas
que pueden acceder a diversas Bases de Datos.
DatabaseMetaData dbmd = conn.getMetaData();

43

DatabaseMetaData.
Ejemplo:

package cursojdbc;
import java.sql.*;
public class DBMetaData01 {
final static String bd = "MI_BIBLIOTECA";
final static String login = "root";
final static String password = "admin";
final static String url = "jdbc:mysql://localhost/" + bd;
Connection conn;
Statement stmt;
public DBMetaData01() throws SQLException,
ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, login, password);
stmt = conn.createStatement();
}

1/2
44

DatabaseMetaData.
Ejemplo:

public void desplegarMetaDatosBD() throws SQLException {


DatabaseMetaData dbmd = conn.getMetaData();
System.out.println("URL de la BD: " + dbmd.getURL());
System.out.println("Usuario de la BD: " + dbmd.getUserName());
System.out.println("Nombre del driver de la BD: " +
dbmd.getDriverName());
ResultSet tablas = dbmd.getTables(null,null,null,null);
System.out.print("Tablas de la BD: ");
while (tablas.next()) {
System.out.print(tablas.getString("TABLE_NAME") + "\t");
}
stmt.close();
conn.close();
}
1/2
45

DatabaseMetaData.
Ejemplo:

public static void main(String[] args) {


try {
DBMetaData01 test = new DBMetaData01();
test.desplegarMetaDatosBD();
}
catch(SQLException sqle) {
System.out.println(sqle);
}
catch(Exception e) {
System.out.println(e);
}
} //fin main
}
1/2
46

Curso Java Servlets y JSPs.

Modulo 02
Prctica de Laboratorio.

47

Objetivos.
Despus de completar este modulo, el participante ser capaz de:
Conectarse a una base de datos a travs de JDBC
Utilizar las instrucciones de JDBC para manipular las tablas de una
base de datos.

48

Prctica de Laboratorio.
Paso 1. Crear una base de datos denominada ControlEscolar y
crear cinco tablas en base a las definiciones siguientes :
Instructor

Curso
CursoId

InstructorId

INT

NombreCurso CHAR 20

INT

NombreInstructor CHAR

60

CursoEstudiante

CursoInstructor Estudiante
CursoId

INT

EstudianteId

INT

InstructorId

INT

NombreEstudiante

CHAR

60

CursoId

INT

EstudianteId

INT

49

Prctica de Laboratorio.
Paso 2. Crear una clase JDBCLab01 que contenga los mtodos
para:
a) Insertar datos en cada una de las tablas
b) Mostrar los datos del instructor y los cursos que esta
impartiendo
c) Actualizar el nombre de un instructor/estudiante/curso

d) Desplegar los datos de los estudiantes registrados


e) Dado un nmero de curso, desplegar el nombre del curso, y
el nombre de los estudiantes registrados en ese curso

Paso 3. Crear una clase JDBCLab01Tester para demostrar el


funcionamiento de JDBCLab01
50

Curso Java Servlets y JSPs.

Modulo 03
JDBC Avanzado.

51

Objetivos.
Despus de completar este modulo, el participante ser capaz de:
Describir el uso de las clases heredadas de la clase Statement.
Discutir acerca de los procedimientos almacenados.
Discutir sobre el manejo de transacciones, cursores y
procesamiento de mltiples resultados.

52

Contenido.

Introduccin.
La clase PreparedStatement.
TestPreparedStatement.java
La clase CallableStatement.
Transacciones.
Niveles de aislamiento transaccional.
Excepciones JDBC.

53

Introduccin.
La especificacin JDBC provee dos clases para la programacin
sofisticada en las bases de datos: PreparedStatement y
CallableStatement.
Con PreparedStatement podemos ejecutar instrucciones SQL
precompiladas y
CallableStatement permite ejecutar los procedimientos
almacenados de las Bases de Datos.
A continuacin estudiaremos cada una de estas instrucciones.

54

La clase PreparedStatement.
El problema con Statement sucede cuando la consulta se realiza
dentro de un ciclo y vara slo en unos valores:
stmt.executeQuery(SELECT * FROM Cliente WHERE codigo = + i);

La base de datos planifica cada consulta.


Conviene disponer de una consulta con parmetros
PreparedStatement que es una especializacin de Statement que
permite definir consultas parametrizadas.
La BD slo planifica la consulta cuando se crea.
Evitan tener que formatear los datos al construir la cadena de
consulta: para cadenas, fechas y horas.
55

La clase PreparedStatement.
Tambin se crean a partir de la conexin:
PreparedStatement pstmt =
conexion.prepareStatement(SELECT * FROM Cliente
WHERE codigo = ?)

Los parmetros de entrada se especifican por posicin utilizando


mtodos setXXX: psmt.setInt(1, 20);
Misma equivalencia que los getXXX de ResultSet.
Los valores se conservan entre ejecuciones.
Borrar parmetros: clearParameters()
Ejecucin:
Consulta: executeQuery().
Actualizacin: executeUpdate().
56

TestPreparedStatement.java
Statement ipStmt = conn.prepareStatement(
INSERT INTO contactos(nombre,telefono,email)
VALUES(?,?,?));
Parmetros IN
ipStmt.setString(1,Juan);
ipStmt.setString(2,01667-7505816);
ipStmt.setString(3,juan@hotmail.com);
int i = ipStmt.executeUpdate();
void setBoolean(int paramIndex, boolean x)

void setDate(int paramIndex, Date x)


void setDouble(int paramIndex, double x)
void setFloat(int paramIndex, float x)
void setInt(int paramIndex, int x)
void setLong(int paramIndex, long x)
void setInt(int paramIndex, int x)
void setString(int paramIndex, String x)
57

La clase CallableStatement.
CallableStatement es el modo estndar de llamar procedimientos
almacenados con la sintaxis de escape SQL de procedimiento
almacenado de API JDBC.
La sintaxis de escape SQL soporta dos formas de procedimientos
almacenados. La primera forma incluye un parmetro de resultado
conocido como parmetro OUT, y la segunda forma no utiliza
parmetros OUT. Cada una de las formas puede tener parmetros
IN.
Cuando el controlador JDBC encuentra {call PROC_ALM},
traducir esta sintaxis de escape al SQL nativo utilizado en la Base
de Datos.

58

La clase CallableStatement.
La sintaxis tpica para llamar a un procedimiento almacenado es:
{call nombre_procedimiento[?,?,?]}
{? = call nombre_procedimiento[?,?,?]}

Los objetos CallableStatement son creados con el mtodo


prepareCall de la interface Connection:
Connection conn = DriverManager.getConnection();
CallableStatement sp = conn.prepareCall({call sp(?,?)});

59

Transacciones.
Ejecucin de bloques de consultas SQL manteniendo las
propiedades ACID (Atomicy-Consistency-Isolation-Durability), es
decir permite garantizar integridad ante fallas y concurrencia de
transacciones
Atomicy: Las operaciones en ella incluida deben ser realizadas
todas en grupo o ninguna.
Consistency: La Base de Datos ha de quedar en un estado que
no viole la integridad de la misma.
Isolation: La lgica debe poder proceder.
Duradero: Si tiene xito la transaccin, las operaciones sern o
pasarn a un estado persistente en la Base de Datos.

60

Transacciones.
Una transaccin que termina exitosamente se compromete
(commit).
Una transaccin que no termina exitosamente se aborta (rollback).
En JDBC por omisin cada sentencia SQL se compromete tan
pronto se ejecuta, es decir una conexin funciona por defecto en
modo auto commit.
Para ejecutar varias sentencias SQL en una misma transaccin es
preciso: deshabilitar el modo autocommit, luego ejecutar las
instrucciones SQL, y terminar con commit si todo va bien o rollback
en otro caso.

61

Transacciones.
Mtodos frecuentemente usados:
void setAutoCommit(boolean b)

Define modo de autocompromiso de


la conexin (por omisin es
true).

boolean getAutoCommit()

Obtiene modo de autocompromiso.

void commit()

Compromete todas las sentencias


desde ltimo compromiso.

void rollback()

Deshace los efectos de las


sentencias SQL desde ltimo
compromiso.

62

Niveles de aislamiento transaccional.


La interface java.sql.Connection, opera con los siguientes niveles:
TRANSACTION_NONE: Sin soporte transaccional.
TRANSACTION_READ_COMMITED: Permite lecturas solo sobre datos
comprometidos. Es el nivel por defecto en JDBC.
TRANSACTION_READ_UNCOMMITED: Permite lecturas sobre datos
no comprometidos.
TRANSACTION_REPETEABLE_READ: Bloquea los datos ledos.
TRANSACTION_SERIALIZABLE: Solo una transaccin al mismo tiempo,
elimina todos los problemas de concurrencia pero como realiza
muchos bloqueos afecta el rendimiento y tambin disminuyen los
accesos concurrentes.
NOTA: No todos los drivers/BDs tienen que soportar todos los niveles de aislamiento. Por
lo regular soportan TRANSACTION_READ_COMMITED que es el nivel por defecto y
TRANSACTION_SERIALIZABLE.
63

Excepciones JDBC.
La mayor parte de las operaciones que nos proporciona el API JDBC
lanzarn la excepcin java.sql.SQLException en caso de que se
produzca algn error a la base de datos (por ejemplo: errores en la
conexin, sentencias SQL incorrectas, falta de privilegios, etc.).
Por este motivo es necesario dar un tratamiento adecuado a estas
excepciones y encerrar todo el cdigo JDBC entre bloques
try/catch. Por ejemplo:
try {
Informacin al usuario de los errores
que se han producido.
}
catch(SQLException sqle) {
System.out.println(SQLException: + sqle.getMessage());
sqle.printStackTrace();
}
64

Excepciones JDBC.
Object
Trata las excepciones que
se producen al manipular
la BD

Throwable
Error
Cuando ocurre un error en los
procesos por lotes

Exception

SQLException

BatchUpdateException
Cuando ocurre perdida de
informacin ya sea en la operacin
de lectura o escritura

Avisos que se
producen al
manipular y
realizar
operaciones
sobre la BD

SQLWarning

DataTruncation
65

Curso Java Servlets y JSPs.

Modulo 04
Prctica de Laboratorio.

66

Objetivos.
Despus de completar este modulo, el participante ser capaz de:
Escribir cdigo Java para crear procedimientos almacenados.
Escribir cdigo Java para utilizar procedimientos almacenados.
Explicar como funciona el manejo de las transacciones.

67

Prctica de Laboratorio.
Paso 1. Crear una base de datos denominada Inventario y crear las
tablas en base a las definiciones siguientes:
Proveedor

Producto
ProductoId

INT

NombreProducto

VARCHAR

200

PrecioProducto

FLOAT

ColorProducto

CHAR

10

ProveedorId

INT

NombreProveedor

VARCHA 100
R

RegionProveedor

CHAR

50

DescripcionProveedor

CHAR

250

Producto_Proveedor
ProductoId

INT

ProveedorId

INT

Cantidad

INT

4
68

Prctica de Laboratorio.
Paso 2. Escribir un programa en Java que cree un procedimiento
almacenado para recuperar todos los datos de la tabla
Producto_Proveedores dado el id de un proveedor.
Paso 3. Escribir cdigo Java que llame a ese procedimiento
almacenado y despliegue los datos utilizando un ResultSet.
Paso 4. Escribir un programa completo en Java que utilice
sentencias precompiladas (prepareStatements) para las
operaciones de la Base de Datos.

69

Introduccin.
JDBC es una API de Java para ejecutar sentencias SQL; es una
especificacin formada por un conjunto de clases abstractas e
interfaces que deben implementar todos los fabricantes del
controlador JDBC.
El driver desarrollado por el fabricante es el que hace de
intermediario entre JDBC y las aplicaciones que acceden a las bases
de datos.

Aplicacin

JDBC

Driver

BD

Nota: JDBC es una marca registrada y no un acrnimo. Sin embargo a menudo se le


menciona como: Java Database Connectivity.
70

Introduccin.
La idea principal de la API de JDBC es que el programador codifique
sus programas abstrayndose de los detalles de implementacin y
configuracin del Sistema Manejador de Base de Datos.
Con la API de JDBC el programador puede:

Manipular las conexin a las Bases de Datos.


Manejar transacciones.
Utilizar sentencias precompiladas.
Realizar llamadas a procedimientos almacenados.
Acceder al diccionario de datos (Metadatos), etc.

La API de JDBC est definida en los paquetes java.sql y javax.sql


que vienen distribuidas en las versiones JSE y JEE respectivamente.

71

Evolucin de JDBC.
Versin

Incorporado en

Nombre del
paquete

Contenido

JDBC 1.0

JDK 1.1

java.sql

Conectividad bsica a los


clientes de Base de Datos

JDBC 2.0
Core API

JDK 1.2 y
posterior

java.sql

Navegacin por los ResultSets,


actualizaciones en Batch,
soporte SQL-3

JDBC 2.0
Optional
API

J2EE y
posteriores

javax.sql

Diseado para sacar provecho de


los Java Beans

JDBC 2.1
Optional
API

No incorporado

javax.sql

Mejora incremental e incorpora


nuevas funcionalidades

JDBC 3.0
Core API

JDK 1.4 y
posteriores

java.sql

Connection y sentencias de tipo


Pooling entre otras
caractersticas

JDBC 4.0

JDK 1.6 y
posteriores

java.sql

Nueva interfaz Wrapper, Carga


automtica del driver JDBC,
mejoras en las conexiones, etc
72

Creacin de la base de datos.


DROP DATABASE IF EXISTS AGENDA;
CREATE DATABASE AGENDA;
USE AGENDA;
CREATE TABLE IF NOT EXISTS contactos(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(80) NOT NULL,
telefono VARCHAR(20) NULL,
email VARCHAR(60) NULL
);

GRANT SELECT,INSERT,UPDATE,DELETE
ON AGENDA.* TO curso'@'localhost'
IDENTIFIED BY curso';
73

Conexin a JDBC.
Una vez que tenemos creada la Base de Datos AGENDA con su
respectiva tabla contactos el siguiente paso es establecer una
conexin. Para ello tenemos dos vertientes:
Conexin directa:
Esta alternativa establece una conexin directa a la base de datos
y solo se recomienda si no existe otra opcin.

Conexin con datasource:


Abstrae los detalles de acceso (carga los drivers, login, etc.)
Suelen mantener un pool de conexiones.
Proporcionado por el contenedor utilizando el API JNDI (Java
Naming and Directory Interface).
Los detalles de acceso se indican en archivos de configuracin.

74

Conexin a JDBC.
En este curso utilizaremos la conexin directa para trabajar con
JDBC.
Las siguientes instrucciones son vlidas para el IDE Eclipse:
Es necesario aadir el JAR del driver a nuestro proyecto en eclipse,
para eso:

Men Project / Properties / Java Build Path.
Add external Jars.

Esto tendramos que realizarlo para cada proyecto.



Men Window / Preferences / Java / Installed JREs / Edit / Add
External Jars
Aadimos el jar.

A partir de ahora, tendremos la librera incluida para cualquier


proyecto.
75

Conexin a JDBC.
Una vez que tenemos creada la Base de Datos AGENDA con su
respectiva tabla contactos el siguiente paso es establecer una
conexin. Para ello tenemos dos vertientes:
Conexin directa:
Esta alternativa establece una conexin directa a la base de datos
y solo se recomienda si no existe otra opcin.

Conexin con datasource:


Abstrae los detalles de acceso (carga los drivers, login, etc.)
Suelen mantener un pool de conexiones.
Proporcionado por el contenedor utilizando el API JNDI (Java
Naming and Directory Interface).
Los detalles de acceso se indican en archivos de configuracin.

76

Cargar el controlador JDBC.


Algunos drivers populares para otras Bases de Datos:
SMBD

Nombre del Driver JDBC

MySQL

Driver: com.mysql.jdbc.Driver
Formato url: jdbc://hostname/databaseName

Oracle

Driver: oracle.jdbc.driver.OracleDriver
Formato url:
jdbc:oracle:thin@hostname:portnumber:databaseName

DB2

Driver: com.ibm.db2.jdbc.net.DB2Driver
Formato url:
jdbc:db2:hostname:portnumber/databaseName

Access

Driver: com.jdbc.odbc.jdbc.OdbcDriver
Formato url: jdbc.odbc.databaseName
77

Cargar el controlador JDBC.


Es importante mencionar que la clase java.sql.DriverManager
trabaja entre el usuario y los controladores. Tiene en cuenta los
drivers disponibles y a partir de ellos establece una conexin entre
una Base de Datos y el controlador adecuado para esa Base de
Datos.
Adems de esta labor principal, el DriverManager se ocupa de
mostrar mensajes de log del driver y tambin el tiempo lmite en
espera de conexin del controlador (time out).
Normalmente, en un programa Java el nico mtodo que un
programador deber utilizar de la clase DriverManager es
getConnection() y como su nombre lo indica establece una
conexin con una Base de Datos.

78

Establecer una conexin JDBC.


Una vez registrado el controlador con el DriverManager, el mtodo
getConnection() debe especificar la fuente de datos a la que se
desea acceder.
En JDBC, una fuente de datos se especifica por medio de un URL
con el prefijo del protocolo jdbc:, la sintaxis y la estructura del
protocolo es la siguiente:

jdbc:<subprotocolo>:<subnombre>

Es el
Identifica el driver Indica el nombre y en donde
protocolo
de la BD
se encuentra la BD
79

Establecer una conexin JDBC.


La documentacin de la Base de Datos establece el tipo de
controlador a utilizar.
El contenido y la sintaxis de subnombre dependen del
subprotocolo, pero en general indican el nombre y la ubicacin de
la fuente de datos.
Cuando la URL de la Base de Datos se carga correctamente se
obtiene una conexin abierta que se puede utilizar para crear
sentencias JDBC que pasen nuestras sentencias SQL al controlador
de la Base de Datos.
Si no logra establecerse una conexin entonces se lanza una
SQLException.

80

Establecer una conexin JDBC.


Para nuestros ejemplos, la URL de conexin es la siguiente:
jdbc:mysql://localhost/Agenda

Las instrucciones tpicas que utilizaremos en nuestros ejemplos es


la siguiente:
String url = jdbc:mysql://localhost/Agenda;
String login = curso;
String password = curso;
Connection conn =
DriverManager.getConnection(url,login,password);

81

TestConexion.java
import java.sql.*;

try {

Importamos la API JDBC


Establece el Driver a utilizar

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn =
DriverManager.getConnection(url,login,password);

conn.close();
}
catch {

Cierra la conexin

Crea la conexin

Si no se logra cargar el driver o sucede una


excepcin utilizando JDBC se lanza la
excepcin correspondiente
82

Arquitectura del API JDBC.


Arquitectura: para acceder a una base de datos es necesario un
driver, la implementacin de todas las interfaces de la API.
<<Interface>>

Statement

<<Singleton>>
DriverManager

<<Interface>>

Connection

PreparedStatement

<<Interface>>

<<Interface>>

<<Interface>>
DatabaseMetaData

<<Interface>>

<<Interface>>
ResultSetMetaData

Conexin

CallableStatement

Comandos

ResultSet

Resultados
83

Creacin de sentencias.
Ya que establecimos la conexin con la Base de Datos podemos
realizar lo siguiente:
Crear objetos de tipo Statement, PreparedStatement y
CallableStatement
Obtener informacin con los objetos DatabaseMetadata
Controlar las transacciones va commit() y rollback()
Delimitar el nivel al que queremos manejar las transacciones

El siguiente diagrama ilustra el uso de las instrucciones ms


importantes para trabajar con JDBC.

84

Objetos Statement.
Los objetos de tipo Statement son creados a partir de una
conexin existente utilizando el mtodo createStatement(). La
sintaxis es:
Statement stmt = conn.createStatement();

Los objetos Statement envan comandos SQL a la Base de Datos .


Para una sentencia SELECT, el mtodo a ejecutar es
executeQuery(). Para sentencias que crean o modifican tablas, el
mtodo a utilizar es executeUpdate(). Para sentencias que no
sabemos el tipo de retorno utilizaremos el mtodo execute().

85

Creacin de sentencias.
executeQuery

ResultSet

Statements

getMoreResults
execute

commit,abort

prepareStatement
getXXX

Data types: Date,


Time, TimeStamp,
Numeric, Built-in
Java types, etc.

PreparedStatement

getXXX

Connection
getConnection

CallableStatement
DriverManager

86

ResultSetMetaData.
Algunos mtodos para ResultSetMetaData:
Nombre del mtodo

Valor R

Descripcin

getColumnCount()

int

Devuelve el nmero de columnas que


contiene la tabla de resultados

getColumnLabel(int column)

String

Devuelve la etiqueta sugerida para la


columna

getColumnName(int column)

String

Devuelve el nombre de la columna

getColumnType(int column)

String

Devuelve el tipo de dato SQL que contiene


la columna

getColumnTypeName(int column)

String

Devuelve el nombre del tipo de dato que


contiene la columna especficos del SMBD

getTableName(int column)

String

Devuelve el nombre de la tabla a la que


pertenece la columna

87

Qu necesitamos para trabajar con JDBC?.


Para trabajar con JDBC y en consecuencia con las bases de datos en
Java necesitamos configurar el ambiente de trabajo.
1

Instalar JDK.

Descargar la ltima versin de la plataforma Java que ya


contiene los paquetes java.sql y javax.sql y seguir
las instrucciones de instalacin.
http://java.sun.com/javase/index.jsp

Instalar el
driver.

Dependiendo del fabricante de el Sistema Manejador de


Base de Datos vamos a necesitar un driver para JDBC.
La instalacin del mismo consiste en copiar el driver en
nuestra computadora en una ubicacin especfica.
http://developers.sun.com/products/jdbc/drivers

Instalar el
SMBD.

Si no hay una Base de Datos instalada en su computadora


busque alguna (MS Access, MySQL, MS SQL Server,
Oracle, Java DB, etc) y siga las instrucciones del
fabricante.
88

Qu necesitamos para trabajar con JDBC?.


Para el desarrollo de nuestro curso vamos a utilizar la IDE de
NetBeans que ya trae todo integrado incluyendo el SMBD Java DB.
http://www.netbeans.org/downloads/index.html

Descargar la ltima versin


y seguir las instrucciones
de instalacin.
Descargar

89

Configuracin de la aplicacin Java.


Una vez que hemos instalado el ambiente de trabajo (IDE
NetBeans), lo que tenemos que hacer es configurar nuestro
proyecto Java para poder realizar los ejemplos que vamos a
desarrollar a lo largo de nuestro curso. Para ello vamos a seguir los
siguientes pasos:
1

Arrancar
NetBeans.

Doble clic sobre el cono que est en el escritorio o bien


buscar la aplicacin en el men Inicio.

90

Configuracin de la aplicacin Java.


2

Crear el
proyecto Java

Con la IDE en ejecucin, el siguiente paso es crear el


proyecto Java. Selecciona el Men File>New Project.
Aparecer un asistente. Seleccionar la categora Java
y el tipo de proyecto ser Java Application. Clic en el
botn Next>.

Clic en
Next

91

Configuracin de la aplicacin Java.


3

Nombre y
ubicacin del
proyecto

El siguiente paso es proporcionar el nombre y ubicacin


del proyecto. El nombre del proyecto ser: CursoJDBC
y la ubicacin ser la ruta asignada por default.
Clic en el botn Finish.

Clic en
Finish

92

Configuracin de la aplicacin Java.


3

Nombre y
ubicacin del
proyecto

Finalmente hemos configurado nuestro proyecto Java y


estamos listos para empezar a trabajar con los cdigos
de ejemplo de este curso.

Estoy listo
para
programar!

93

Creacin de la base de datos CoffeeBreak.


Ahora necesitamos definir nuestra base de datos para el curso que
llamaremos: CoffeeBreak.
Suponga que el propietario de un caf llamado Coffee Break
utiliza una base de datos para controlar la cantidad de tazas de caf
que se venden en una semana determinada.
En un enfoque minimalista el propietario solo utiliza dos tablas:
una para los tipos de caf y otra para los proveedores.

94

Creacin de la base de datos CoffeeBreak.


En nuestro proyecto Java CursoJDBC de NetBeans realizar lo
siguiente:
1

Localizar y clic
en la pestaa
Services.

En nuestro proyecto CursoJDBC localizar la pestaa


Services y dar un clic con el ratn. Luego seleccionar la
opcin Databases.
Clic en
Services

Clic en
Databases

95

Creacin de la base de datos CoffeeBreak.


Ahora vamos a crear la Base de Datos utilizando el SMBD Java DB
para ello:
2

Clic derecho
del ratn en
Java DB.

En el men contextual seleccionar la opcin: Create


Dadatabase. Despus en el asistente proporcionar el
nombre de la base de datos: CoffeeBreak con el nombre
de usuario y password: curso. Clic en el botn OK.

Clic
derecho
Clic
Clic en OK

96

Creacin de la base de datos CoffeeBreak.


El siguiente paso es conectarse con la base de datos JavaDB:
2

Seleccionar
la BD
CoffeeBreak.

En la pestaa Services y JavaDB localizar la base de


datos CoffeBreak. Clic derecho y seleccionar la opcin
Connect.

Clic
derecho

Clic

97

Creacin de la base de datos CoffeeBreak.


Ahora estamos listos para crear las tablas de la base de datos:
2

Seleccionar
la BD
CoffeeBreak.

Clic derecho en la BD CoffeeBreak y seleccionar la


opcin Execute Command.

Clic
derecho

Clic

Aqu vamos a
crear el script

98

Creacin de la base de datos CoffeeBreak.


3

Crear el
Script SQL.

En el editor de cdigo escribir el siguiente cdigo SQL.

CREATE TABLE PROVEEDOR (


PROV_ID INTEGER NOT NULL,
PROV_NOMBRE VARCHAR(40),
CALLE VARCHAR(40),
CIUDAD VARCHAR(20),
ESTADO VARCHAR(20),
CODIGO_POSTAL VARCHAR(5),
PRIMARY KEY(PROV_ID)
);
CREATE TABLE CAFE(
CAFE_NOMBRE VARCHAR(32) NOT NULL,
PROV_ID INTEGER,
PRECIO FLOAT,
VENTAS INTEGER,
TOTAL INTEGER,
PRIMARY KEY(CAFE_NOMBRE),
CONSTRAINT CAFE_FK1 FOREIGN
KEY(PROV_ID)
REFERENCES PROVEEDOR(PROV_ID)
);

Clic en el
botn Run
SQL.
Tablas

Por ltimo damos clic en


el botn Run SQL para
ejecutar el script.
Clic

99

Conectarse a la base de datos: JavaDB.


En el proyecto creado anteriormente en la IDE NetBeans:
CursoJDBC vamos a crear una clase de nombre TestConexion.java
para probar la conectividad a la base de datos JavaDB.
En el caso de que tengamos que conectarnos a una base de datos
distinta tendramos que buscar el driver JDBC en particular,
instalar, configurar y consultar la documentacin del fabricante.
Manos a la obra!, las siguientes diapositivas muestran paso a
paso como realizar la conexin a la base de datos.

100

Conectarse a la base de datos: JavaDB.


1
2

Arrancar
NetBeans.

Si no est abierto la IDE NetBeans: doble clic sobre el cono


que est en el escritorio o bien buscar la aplicacin en el
men Inicio.

Configurar el Es necesario aadir el driver derby.jar para JavaDB en


Driver JDBC. nuestro proyecto JavaJDBC. Clic derecho en el Proyecto
CursoJDBC. Seleccionar la opcin Properties.
Aparecer la ventana de propiedades del proyecto
(Project Propierties). Clic en la categora
Libraries y luego clic en el botn Add JAR/Folder
para buscar el driver derby.jar que se encuentra
ubicado en la ruta C:\Archivos de
Programa\Sun\JavaDB\lib\derby.jar
Clic en el botn Abrir para regresar a la ventana
de propiedades del proyecto. Clic en el botn OK.
A partir de ahora tenemos incluida la librera para
el proyecto.
101

Conectarse a la base de datos: JavaDB.


Clic

Seleccionar la ruta

Clic

C:\Archivos de Programa\Sun\JavaDB\lib\derby.jar

Clic
Clic

102

Conectarse a la base de datos: JavaDB.


3

Crear una
clase Java.

Seleccionar con un clic el men File>New File. En el


asistente seleccionar la categora Java y el tipo de archivo
Java Class. Luego dar clic en el botn Next>. Entonces
proporcionar el nombre de la clase: TestConexion (verifique
que se encuentre asociado al paquete cursojdbc) y clic en el
botn Finish.
Clic

Las ilustraciones se muestran en la siguiente diapositiva.

103

Conectarse a la base de datos: JavaDB.


Asistente despus de seleccionar
Menu File>New File.

Clic

Class Name: TestConexion


Asistente despus de
dar clic en el botn
Next>.

Clic

Una vez que damos clic en el botn Finish en la pantalla principal de la IDE nos
aparecer el editor de texto con la definicin de la clase TestConexion.
104

Conectarse a la base de datos: JavaDB.


4

Antes de proceder a probar la conexin con la base de datos


Escribir
mtodo main. vamos a escribir en el editor de cdigo el mtodo main (y a
importar la librera java.sql).

package cursojdbc;

El paquete java.sql contiene clases e interfaces


para manipular bases de datos en Java.

import java.sql.*;
public class TestConexion {
public static void main(String[] args) {
//El cdigo va aqu
}
}

En el editor de cdigo.

105

Conectarse a la base de datos: JavaDB.


3

Escribir el
cdigo
restante.

Cargar el driver para JavaDB es muy simple:


Class.forName(org.apache.derby.jdbc.Embedded); La
instruccin para conectarnos a la base de datos:
Connection conn =
DriverManager.getConnection("jdbc:derby:CoffeeBreak;cr
eate=true","curso","curso");

106

Conectarse a la base de datos: JavaDB.


package cursojdbc;
import java.sql.*;
public class TestConexion {
public static void main(String[] args) {
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
System.out.println("Driver JDBC encontrado.");
Connection conn = DriverManager.getConnection
("jdbc:derby:CoffeeBreak;create=true","curso","curso");
System.out.println("Conexin bd establecida.");
conn.close();
System.out.println("Conexin bd cerrada.");
}
1 de 2
107

Conectarse a la base de datos: JavaDB.


catch(ClassNotFoundException cnfe) {
System.out.println("Driver JDBC no encontrado");
cnfe.printStackTrace();
}
catch(SQLException sqle) {
System.out.println("Error al conectarse a la BD");
sqle.printStackTrace();
}
}
}

2 de 2
108

Você também pode gostar