Vous êtes sur la page 1sur 23

JDBC

Software para Telecomunicaciones 1

Mg. Stuardo Lucho


Clase 9 1
JDBC
JDBC es un API de Java que permite acceder a la informacin almacenada
en una amplia gama de DBMS.
La librera JDBC incluye APIs para realizar las siguientes tareas:
Conexin 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 conexin con el servidor de base de datos.
Esta conexin se almacena en un objeto del tipo Connection.

3. Se crea un objeto del tipo Statement donde se indicarn 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
Conexin a MySQL
Para crear una conexin con el servidor de base de datos, JDBC usa la clase
DriverManager, la cual, por medio del mtodo getConnection() crea una
instancia de la clase Connection, el cual contiene la informacin de la
conexin.

Usuario
Password

Se indica el driver Direccin IP del Servidor Puerto de Esquema de Base de datos sobre
que se desea cargar de base de datos comunicacin la que se trabajar

7
Conexin a MySQL
Una vez creado el objeto del tipo Connection, ste contendr la
informacin de la conexin (siempre y cuando haya sido exitosa).
Si existiera un error de conexin al servidor de Base de Datos, se emitir
una excepcin 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
informacin 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 parmetros de entrada
ni salida.

PreparedStatement.- Usado para sentencias SQL pre-compiladas que


pudieran contener parmetros de entrada.

CallableStatement.- Usado para ejecutar procedimientos almacenados que


puedan contener parmetros 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 parmetro del mtodo executeQuery(SQL) y
capturar el resultado.

Usuario root sin password

Sentencia SQL

Se pasa como parmetro


Se captura el resultado
en un objeto ResultSet 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 mtodo
executeUpdate(SQL).

Sentencia SQL
DELETE

Como resultado se obtiene el nmero 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 mtodo next(), se mueve el cursor a la fila siguiente.
Cada vez que se llama al mtodo next(), por medio de los mtodo getString, getInt,
getFloat, entre otros, se pueden acceder a las variables de la fila en que est el puntero.

El mtodo next() devuelve false cuando ya no quedan ms filas


disponibles en el resultado.

13
Tipos de Datos SQL

Dato SQL Mtodo 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 an si se ha
lanzado una excepcin.

16
SQL injection
Es una sentencia SQL que permite al usuario que interacta con la
aplicacin, inyectar o ejecutar comandos SQL indebidos mediante el
ingreso de parmetros de entrada manipulados.
Es uno de los ataques ms comunes a los sistemas de informacin.
Analizar el siguiente ejemplo:

17
SQL injection
En el ejemplo anterior, username y password son parmetros que se han
recibido previamente desde alguna aplicacin (consola o GUI).
Si el usuario intencionalmente coloca:
Username = admin OR 1=1
Password = (vacio)

El Query que se enviara como parmetro sera:

La clausula OR hace que la condicin 1=1 convierta siempre en


verdadero el username, an si no se ha colocado password.

18
Prepared Statements
Con el fin de evitar este comportamiento se utilizarn Prepared
Statements, en lugar de Statements, con el fin de escapar los caracteres
que sern enviados como parte de la sentencia SQL.
Los objetos PreparedStatement hereda de la clase ms 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 parmetros
de entrada directamente en la sentencia SQL, se coloca el smbolo ?,
cuantas veces sea necesario por cuantos parmetros 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 parmetros de entrada, se colocan ?

Se pasa como parmetro la sentencia SQL

Se asignan los parmetros 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 parmetros y
no en la definicin de la sentencia:

As mismo, si lo que se desea buscar es el smbolo % o _ (wildcards), se


debe escapar los caracteres de la siguiente manera.

Con JDBC:

21
Alguna consulta?

22
Muchas gracias

23

Vous aimerez peut-être aussi