JDBC

JDBC Software para Telecomunicaciones 1 Mg. Stuardo Lucho Clase 9 1 JDBC ● JDBC es un API de Java que permite acce

Views 275 Downloads 0 File size 632KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

JDBC Software para Telecomunicaciones 1

Mg. Stuardo Lucho

Clase 9

1

JDBC ●

JDBC es un API de Java que permite acceder a la información almacenada en una amplia gama de DBMS.



La librería JDBC incluye APIs para realizar las siguientes tareas: ○

Conexión con un servidor de base de datos.



Enviar consultas u otras sentencias DML.



Obtener y procesar los resultados recibidos desde la base de datos.

2

Funcionamiento JDBC

Programa Java JDBC

Dbms

DRIVER 3

Drivers compatibles JDBC Oracle

MySQL

DB2

Otros Access

Lista Completa: http://www.oracle.com/technetwork/java/index-136695.html

4

Procedimiento JDBC Para ejecutar sentencias SQL desde Java por medio de JDBC se siguen los siguientes pasos: 1.

Se carga el driver correspondiente.

2.

Se establece una conexión con el servidor de base de datos. Esta conexión se almacena en un objeto del tipo Connection.

3.

Se crea un objeto del tipo Statement donde se indicarán las sentencias SQL.

4.

El resultado de una sentencia SQL es almacenado en un objeto del tipo ResultSet.

5.

Finalmente, se “cierran” los objetos ResultSet, Statement y Connection.

5

Carga de driver Registro de MySQL JDBC Driver:

6

Conexión a MySQL Para crear una conexión con el servidor de base de datos, JDBC usa la clase DriverManager, la cual, por medio del método getConnection() crea una instancia de la clase Connection, el cual contiene la información de la conexión.

Usuario Password

Se indica el driver que se desea cargar

Dirección IP del Servidor de base de datos

Puerto de comunicación

Esquema de Base de datos sobre la que se trabajará

7

Conexión a MySQL ●

Una vez creado el objeto del tipo Connection, éste contendrá la información de la conexión (siempre y cuando haya sido exitosa).



Si existiera un error de conexión al servidor de Base de Datos, se emitirá una excepción del tipo SQLException.

8

Creando Statements ●

Un objeto del tipo Statement es una interfaz que representa una sentencia SQL.



Cuando se ejecuta (executeQuery) un objeto del tipo Statement, se genera un objeto del tipo ResultSet.



El objeto ResultSet contiene una tabla de datos los cuales representan la información devuelta por la DB.



Para crear un objeto Statement primero debe existir un objeto Connection.

9

Creando Statements ●

Creando un objeto Statement:



Existen 3 tipos de statements: ○

Statement.- Usado para sentencias SQL simples, sin parámetros de entrada ni salida.



PreparedStatement.- Usado para sentencias SQL pre-compiladas que pudieran contener parámetros de entrada.



CallableStatement.- Usado para ejecutar procedimientos almacenados que puedan contener parámetros de entrada y de salida.

10

Ejecutando Queries - Sentencia SELECT Una vez creado el objeto Statement, es necesario definir la sentencia SQL que se desea ejecutar. Pasarla como parámetro del método executeQuery(SQL) y capturar el resultado. Usuario root sin password

Sentencia SQL

Se captura el resultado en un objeto ResultSet

Se pasa como parámetro 11

Ejecutando Sentencias INSERT, UPDATE o DELETE Cuando la sentencia SQL no es consulta, sino por el contrario, implica modificar los datos dentro de una tabla, se utiliza el método executeUpdate(SQL).

Sentencia SQL DELETE Como resultado se obtiene el número de filas afectadas por la sentencia SQL

12

Objeto ResultSet ●

Para acceder a la data que ha sido almacenada en el objeto ResultSet, se realiza mediante un puntero. Este puntero está inicializado una fila antes del primer registro del resultado.



Por medio del método next(), se mueve el cursor a la fila siguiente. ○



Cada vez que se llama al método next(), por medio de los método getString, getInt, getFloat, entre otros, se pueden acceder a las variables de la fila en que está el puntero.

El método next() devuelve false cuando ya no quedan más filas disponibles en el resultado.

13

Tipos de Datos SQL Dato SQL

Método ResultSet

INTEGER

getInt()

BIGINT

getLong()

FLOAT

getDouble()

DOUBLE

getDouble()

DECIMAL

getBigDecimal()

CHAR

getString()

VARCHAR

getString()

BINARY

getBytes()

DATE

getDate()

TIME

getTime()

TIMESTAMP

getTimestamp() 14

Objeto ResultSet Ejemplo 1: ● Se mostrará el id, nombre y apellido del empleado con id = 100

Se recorre con el puntero las filas contenidas en el objeto ResultSet

15

Cerrando Conexiones ●

Cuando se termina de ejecutar una sentencia SQL, el objeto Statement debe ser cerrado para liberar los recursos que está usando.



Es recomendado cerrarlo como parte de la sentencia finally del try-catch, de esta manera, nos aseguramos que el objeto se cierre aún si se ha lanzado una excepción.

16

SQL injection ●

Es una sentencia SQL que permite al usuario que interactúa con la aplicación, inyectar o ejecutar comandos SQL indebidos mediante el ingreso de parámetros de entrada manipulados.



Es uno de los ataques más comunes a los sistemas de información.



Analizar el siguiente ejemplo:

17

SQL injection ●

En el ejemplo anterior, username y password son parámetros que se han recibido previamente desde alguna aplicación (consola o GUI).



Si el usuario intencionalmente coloca: ○ ○

Username = admin’ OR ‘1’=‘1 Password = “” (vacio)



El Query que se enviaría como parámetro sería:



La clausula “OR” hace que la condición 1=1 convierta siempre en verdadero el username, aún si no se ha colocado password.

18

Prepared Statements ●

Con el fin de evitar este comportamiento se utilizarán Prepared Statements, en lugar de Statements, con el fin de “escapar” los caracteres que serán enviados como parte de la sentencia SQL.



Los objetos PreparedStatement hereda de la clase más general Statement.



Si una consulta se va a ejecutar muchas veces, es preferible usar Prepared Statements, pues el DBMS solo lo compila 1 vez.



Cuando se usan Prepared Statements, en vez de colocar los parámetros de entrada directamente en la sentencia SQL, se coloca el símbolo “?”, cuantas veces sea necesario por cuantos parámetros de entrada se tengan.

19

Prepared Statements Mostrar el empleado con nombre Steven y perteneciente al departamento 90. Primero se declara la sentencia SQL y en donde deben ir los parámetros de entrada, se colocan “?”

Se pasa como parámetro la sentencia SQL Se asignan los parámetros de entrada, en el orden en que se ha colocado los “?”

20

Observaciones ●

Cuando se usa LIKE, las wildcards se utilizan en el seteo de parámetros y no en la definición de la sentencia:



Así mismo, si lo que se desea buscar es el símbolo % o _ (wildcards), se debe escapar los caracteres de la siguiente manera.

Con JDBC:

21

¿Alguna consulta?

22

Muchas gracias

23