• No se han encontrado resultados

JDBC. Francisco Javier Solans Benedí Software Developper

N/A
N/A
Protected

Academic year: 2021

Share "JDBC. Francisco Javier Solans Benedí Software Developper"

Copied!
31
0
0

Texto completo

(1)

JDBC

Francisco Javier Solans Benedí

(2)

Definición

(3)

Configuración

● Para usar las librerías JDBC, es necesario realizar los siguientes pasos: ● Instalar el kit J2SDK (Java 2 Standard Development Kit).

– Por defecto, se incluye el controlodar JDBC-ODBC.

● Desplegar el Driver JDBC (específico para cada base de datos).

– Basta con copiar las librerías (.jar) en la máquina (en el directorio .\java\jre\lib\ext o

indicarlo en el classpath). ● Instalar la base de datos.

B.D.

Driver JDBC

J2SDK

(4)

Controladores JDBC (I)

TiposTipos de driversdrivers JDBC :

● Tipo 1: JDBC-ODBC bridge. ● Tipo 2: Native-API Driver.

● Tipo 3: Network-Protocol Driver. ● Tipo 4: Native-Protocol Driver.

(5)

Controladores JDBC (II)

Tipo 1: JDBC-ODBC bridge.

Tipo 1

● El driver está implementado en la clase sun.jdbc.odbc.JdbcOdbcDriver y viene adjunto en Java 2 SDK, Standard Edition.

● Utiliza el estándar ODBC de la plataforma Microsoft.

● Ventajas:

● Nos garantiza el acceso a casi todas las bases de datos comerciales

(solución provisional). ● Desventajas: ● Lento. Puente JDBC-ODBC Aplicación Java JDBC Servidor base de datos Base de datos Gestor de controladores JDBC Controlador ODBC

(6)

Controladores JDBC (III)

Tipo 2: Native-API Driver.

Tipo 2

● Implementación del driver que utiliza las librerías del lado cliente de la base de datos.

● No está implementado totalmente con Java.

● Desventajas:

● Dependiente del sistema operativo.

Aplicación Java Controlador API parcialmente nativa-Java Servidor base de datos Base de datos JDBC

(7)

Controladores JDBC (IV)

Tipo 3: Network-Protocol Driver.

Tipo 3

● El controlador JDBC traduce las órdenes JDBC a un protocolo de red independiente del SGBD. Este protocolo es finalmente vuelto a traducir al lenguaje específico del SGBD.

● Ventajas:

● Nos garantiza en el cliente una aplicación 100% Java.

● Desventajas:

● Necesita pasos intermedios ya que al contrario que el tipo 4, el driver no reside en el cliente sino en la capa intermedia. Protocolo de red (middleware) Servidor base de datos Base de datos Aplicación Java JDBC Controlador JDBC-red 100% Java

(8)

Controladores JDBC (V)

Tipo 4: Native-Protocol Driver.

Tipo 4

● Implementado 100% Java por lo que es independiente de la plataforma.

● Controladores completamente escritos en Java, que traducen las órdenes JDBC directamente al protocolo de red que emplea el SGBD

● Ventajas:

● Solución ideal.

● Desventaja:

● No todas las bases de datos disponen de controladores del tipo 4.

Controlador 100% Java Servidor base de datos Base de datos Aplicación Java JDBC

(9)

El paquete java.sql

● La clase DriverManagerDriverManager

● La interfaz DriverDriver

● Constituye la base para poder implementar controladores JDBC.

● La interfaz ConexiónConexión

● Interfaces de sentencias SQL: ● La interfaz StatementStatement

● La interfaz PreparedStatementPreparedStatement ● La interfaz CallableStatementCallableStatement

(10)

La clase DriverManager (I)

Se encarga de gestionar los controladores JDBC.

Registrar los controladores JDBC.

● Class.forName()

Establecer una conexión con la base de datos.

● public static synchronized Connection getConnection(String url);

● public static synchronized Connection getConnection(String url, String usuario, String password);

(11)

La clase DriverManager (II)

Controlar el tiempo de conexión.

● public static void setLoginTimeout(int segundos); ● public static int getLoginTimeout();

Presentar mensajes del estado de la conexión.

● public static PrintStream getLogStream();

(12)

La interfaz Connection

● Los objetos de esta interfaz son los que representan una conexión con una base de datos.

● Al ejecutar el método getConnection() de la clase DriverManager, se nos devuelve un objeto de la clase Connection.

CierreCierre de la conexión:

● public abstract void close() throws SQLException.

EstadoEstado de la conexión:

(13)

Interfaces de sentencias SQL

Envío de sentencias SQL :

Statement PreparedStatement CallableStatement

(14)

La interfaz Statement (I)

● Los objetos de esta interfaz se usan para enviar sentencias simples SQL a bases de datos.

CreaciónCreación de objetos

– Método createStatement() de la interfaz Connection

PeticionesPeticiones a la base de datos

CierreCierre de las peticiones

(15)

La interfaz Statement (II)

Peticiones simples :

Peticiones simples

● De tipo consulta (query), ej: SELECT

– public abstract ResultSet executeQuery(String sql) throws SQLException

● De modificación (update), ej: UPDATE, INSERT, CREATE TABLE

– public abstract int executeUpdate(String sql) throws SQLException

Peticiones más complejas :

Peticiones más complejas

● public abstract boolean execute (String sql) throws SQLException

– true: Petición query

● ResultSet getResultSet () throws SQLException

– false: Petición update

(16)

La interfaz Statement (III)

Ejemplo :

// Preparar la sentencia

Statement stmt = conn.createStatement() ; // Poner el primer parámetro

ps.setString( 1, id ) ; // Ejecutar la consulta

ResultSet rs = ps.executeQuery("SELECT * FROM equipamientos WHERE id = ?") ; // Iterar por el resultado

while( rs.next() )

(17)

La interfaz PreparedStatement (I)

Es una interfaz heredada de Statement. Sus instancias son sentencias SQL ya

compiladas en las que podemos introducir uno o más parámetros de entrada.

Creación de objetos PreparedStatement

Creación

● public abstract PreparedStatement prepareStatement(String peticion) throws SQLException

Paso de parámetros de entrada con setxxx()

Paso de parámetros

setxxx (posicionParametro valor);

Ejecución de la petición

Ejecución

● Métodos análogos a los da la interfaz Statement: execute(), executeQuery() y

(18)

La interfaz PreparedStatement (II)

Ejemplo :

// Preparar la sentencia

PreparedStatement ps = conn.prepareStatement( "SELECT * FROM equipamientos WHERE id = ?" ) ; // Poner el primer parámetro

ps.setString( 1, id ) ; // Ejecutar la consulta

ResultSet rs = ps.executeQuery() ; // Iterar por el resultado

while( rs.next() )

(19)

Procedimientos almacenados (I)

Programa escrito en el

Programa

dialecto SQL del sistema gestor de la base de datos que se

dialecto SQL

compila y funciona en el servidor.

Ventajas:

Ventajas

● Rapidez de ejecución. ● Seguridad de conjunto.

Desventajas:

Desventajas

● No implementado por todos los sistemas gestores de bases de datos.

(20)

Procedimientos almacenados (II)

Los

procedimientos almacenados estan formados por parámetros de entrada (IN), de

procedimientos almacenados

salida (OUT) y de entrada-salida (INOUT).

Existen dos

esquemas

posibles:

Función:

Función

Con parámetro resultado, un tipo particular de

parámetro OUT :

parámetro OUT

{? = call nombre_proc([?, ?, ...])}

Procedimiento :

Procedimiento

Sin parámetro resultado:

{call nombre_proc ([?, ?, ...])}

(21)

Procedimientos almacenados (III)

Ejemplo de procedimiento :

CREATE PROCEDURE INSERTAR_SECUENCIA (p_numero VARCHAR2) IS

BEGIN

INSERT INTO secuencia (p_numero) VALUES (p_numero);

END;

Ejemplo de función :

CREATE FUNCTION SIGUIENTE (p_numero NUMBER) RETURN NUMBER IS

BEGIN

return p_number – 1; END;

(22)

La interfaz CallableStatement (I)

Los objetos de esta interfaz contienen llamadas a procedimientos almacenados en el

sistema gestor de bases de datos.

Creación de objetos :

Creación

● public abstract CallableStatement prepareCall(String llamada) throws SQLException

Paso de parámetros :

Paso

Registrar los

parámetros de salida (OUT) :

parámetros de salida

– public abstract void registerOutParameter(int posicionParametro, int tipoJDBC)

throws SQLException

Inicializar los

parámetros de entrada (IN) :

parámetros de entrada

(23)

La interfaz CallableStatement (II)

Ejecutar el procedimiento :

– Métodos executeUpdate(), executeQuery(), execute() heredados de la interfaz

padre PreparedStatement.

Recoger los valores de los parámetros OUT :

(24)

La interfaz CallableStatement (III)

Ejemplo de parámetros IN, OUT :

// Llama al procedimiento ejemplo

CallableStatement cstmt = con.prepareCall(“{call ejemplo(?, ?)”); // Registro de los parámetros OUT

cstmt.registerOutParameter(1, java.sql.Types.TINYINT) // Registro de los parámetros IN

cstmt.setBoolean(2, true); // Ejecuta el procedimiento cstmt.executeQuery(); // reenvia los valores

(25)

La interfaz CallableStatement (IV)

Ejemplo de parámetros INOUT :

CallableStatement cstmt = con.prepareCall(“{call revisaTotal (?)”);

// se pone 25 en el parámetro que el controlador enviará a la base de datos como un TINYINT de SQL cstmt.setByte(1,25);

// se registra el parámetro como un TINYINT de SQL cstmt.registerOutParameter(1, java.sql.Types.TINYINT); // se ejecuta el procedimiento

cstmt.executeUpdate();

// Se recoge el valor obtenido (TINYINT) como un byte de Java byte x = cstmt.getByte(1);

(26)

Transacciones

● Se emplean para conservar la integridad de la información. Con ello, se asegura de que ciertas operaciones, que se deben realizar de forma conjunta, o se realizan completamente (commit), o no se realiza ninguna, deshaciéndose los cambios parciales (rollback).

● Por defecto, se abre en auto-commit, es decir que tras cada comando, los cambios se escriben el disco duro del SGBD.

● Para implementar las transacciones en JDBC, la interfaz Connection viene con una serie de métodos:

● public abstract setAutoCommit(boolean autoCommit) throws SQLException ● public boolean getAutoCommit() throws SQLException

(27)

Las interfaces xxMetaData

● La interfaz DatabaseMetaDataDatabaseMetaData

● Da información acerca del SGBD, desde la forma en la que se estructura hasta las funciones que soporta.

● Ejemplo :

DatabaseMetaData dma = con.getMetaData ();

System.out.println("\nConnected to: " + dma.getURL()); System.out.println("Driver: " + dma.getDriverName()); System.out.println("Version: " + dma.getDriverVersion());

● La interfaz ResultSetMetaDataResultSetMetaData

● Se consigue la información acerca del resultado de una consulta (ResultSet).

● Ejemplo :

ResultSetMetaData rsmd = rs.getMetaData (); int numCols = rsmd.getColumnCount (); for (int i=1; i<=numCols; i++) {

if (i > 1) System.out.print(",");

System.out.print(rsmd.getColumnLabel(i)); }

(28)

Obtención de resultados

La clase

Types :

Types

● Se definen los tipos de datos para los SGBD.

● Los tipos de datos del SGBD no coinciden con los de Java por lo que se realizan los conversiones de JDBC a Java y de Java a JDBC.

(29)

La clase Types

● Es una clase del paquete java.sql que deriva de la clase Object.

● Los tipos de datos del SGBD no coinciden con los de Java; además cada SGBD posee sus propios tipos de datos.

● Tipos de datos definidos por la clase Types:

● BIGINT, BINARY, BIT, CHAR, DATE, DECIMAL ...

● Conversión de tipos JDBC a JavaJDBC a Java :

● BIGINT = long, BINARY = byte[], VARBINARY = byte[], ...

● Conversión de tipos Java a JDBC Java a JDBC :

(30)

La interfaz ResultSet (I)

Los objetos de esta interfaz son el resultado de una sentencia de tipo query

(consulta).

● El objeto de la interfaz ResultSet se obtiene al realizar una consulta a una base de datos mediante el método executeQuery() de la interfaz Statement.

Moverse por las filas:

● public abstract boolean next() throws SQLException

Desplazamiento por columnas: la serie de métodos

getxxx

()

● public abstract boolean getString(int numeroColumna) throws SQLException ● public abstract boolean getString(String nombreColumna) throws SQLException

(31)

La interfaz ResultSet (II)

Ejemplo :

String nombre = null, apellido = null;

Statement orden = conexión.createStatement();

ResultSet r = peticion.executeQuery(“SELECT nombre, apellido FROM clientes”); while (r.next()) {

// Imprime los valores de cada fila nombre = r.getString(“nombre”) ;

apellido = r.getString(2); // Cojo la segunda columna: “apellido” System.out.println(“Nombre: ” + nombre + “ Apellido: “ + apellido); }

Referencias

Documento similar

En cuanto a la futura aplicación de gestión administrativa, se dejará la base de datos diseñada teniendo en cuenta requisitos o necesidades que habrá de

Un Sistema Gestor o Manejador de Bases de Datos (SGBD) es un conjunto de programas que permite a los usuarios crear y mantener una Base de Datos (BD), por lo tanto, es un software

Para llevar un control de las acciones realizadas por los usuarios que interactúan con la BD se creó un grupo de tablas que funcionan como un historial donde se guardan todas

Se caracterizan, además, la metodología de desarrollo de software, la herramienta de modelado, el lenguaje de programación Web, el sistema gestor de base de datos y el sistema

En el caso de realizar una análisis estructural dinámico lineal de un edificio en particular, se necesita disponer de la información correspondiente a las dimensiones en planta y

Aquest fitxer conté les propietats del JDBC per a realitzar la connexió amb la Base de Dades i conté la direcció de cada sqlMap.xml de cada taula. o daoConfig.xml: És el fitxer

De non ser así, as facturas non poderán tramitarse para o pago, e a USC, a través do responsable de asuntos económicos do centro da USC que solicitou os seus servicios Rexeitará

La definición de las tareas, variables de entorno, plantillas y controladores realizados para este TFM como ejemplo de distribución en un aula de un servidor apache con php y una