Está en la página 1de 20

Unidad 3

1 //Escenario
Escenario25
Lectura fundamental
Fundamental

Lenguajes
Etapas de un
SQL
plan
para
de acceder
comunicación
a bases
estratégica
de datos

Contenido

1 Lenguaje SQL transaccional

2 Paquetes Java

3 Conexión Java Oracle, MySQL, Hsql

4 Ejecución de operaciones sobre la base de datos

5 Instrucciones con ResultSet ()

6 Instrucciones con Prepared_Statement ()

7 Operaciones de manejo de datos transaccionales (INSERT, DELETE, UPDATE)

8 JPQL. Java Persistence Query Language

Palabras clave: sql, ado, dao, jdbc, odbc, msql, hsql, oracle, jpql, select, insert, update, delete, java.
1. Lenguaje SQL transaccional
Hoy, con el mundo globalizado, la mayor parte de las operaciones de una empresa, universidad o
institución, se realizan con base en transacciones, ya sean financieras, comerciales, académicas, etc.

La información reside en los repositorios de las bases de datos y una de las herramientas que se
usa para acceder a la información es el SQL. Así como en la programación paralela hay que usar la
programación clásica, en el mundo transaccional, hay que hacer uso del SQL.

La palabra transacción tiene una fuerte implicación cuando se habla de ella en una operación
computacional. Una transacción es una sola unidad de trabajo. Si una transacción tiene éxito, todas
las modificaciones de datos realizadas durante la misma se comprometen y se convierten en una parte
permanente de la base de datos. Si una transacción encuentra errores y debe cancelarse o revertirse,
se borran todas las modificaciones de datos.

Operaciones explícitas. Por lo general, la mayoría de los lenguajes, tales como el Pl-SQL de Oracle o
sql de sql-server, tratan las transacciones explícitas de la siguiente forma: Cada transacción se inicia
explícitamente con la instrucción BEGIN TRANSACTION y se termina explícitamente con una
instrucción COMMIT o ROLLBACK.

Transacciones implícitas. Se presentan de manera implícita cuando se completa la transacción


anterior, pero cada transacción se completa explícitamente con una instrucción COMMIT o
ROLLBACK.

Ejemplo:

BEGIN TRANSACTION;

DELETE FROM RecusosHumanos.empleado

WHERE cedula = 20;

COMMIT;

Las operaciones transaccionales en lenguajes no genéricos de un motor de base de datos, solo se


pueden realizar preparando las operaciones con base en un API y para ello se requiere del uso de un
lenguaje de alto nivel como el Java.

POLITÉCNICO GRANCOLOMBIANO 2
Una buena práctica es la siguiente:

A. Levantar el driver y establecer la conexión


B. Ejecutar el query, iterarlo ya sea con un ciclo y un option_pannel para mostrar los datos
C. Cerrar la conexión.

2. Paquetes que se requieren en Java


Para poder conectarse a una base de datos, desde java con JDBC, es necesario alistar los siguientes
imports.

Se necesita:
import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

import java.sql.ResultSet;

Otra forma que se usa por lo general es: import.sql.*

3. Conexiones Java Oracle, mysql, hsql


Cada motor de base de datos, usa una cadena de conexión propia, por lo que se debe ser muy
cuidadoso a la hora de implementar un driver de conexión para un determinado motor de BD.

3.1. Cadenas de conexión Oracle.

Oracle proporciona tres estilos de cadenas de conexión dependiendo de la necesidad:

• JDBC Thin Driver: No requiere de la instalación cliente de ORACLE. Se usa cuando se


desarrollan conexiones con applets

• JDBC OCI: API nativa de ORACLE, para aplicaciones propias con J2EE

• JDBC KPRB driver: Conexión por defecto. Para procedimientos almacenados y JSP’s con la
base de datos.

POLITÉCNICO GRANCOLOMBIANO 3
Las cadenas son las siguientes:

JDBC Thin Driver: (formato web-server)

DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());

Connection conn = DriverManager.getConnection

(“jdbc:oracle:thin:@WIN01:1521:oracleBD”, “user”, “passw”); Se debe tener presente el puerto


y el nombre de la base de datos

JDBC OCI: Requiere que el archivo TNS names haya sido configurado tanto el cliente como en
el servidor.
try {

Class.forName (“oracle.jdbc.driver.OracleDriver”);

} catch (Exception ex) { …}

Connection conn = DriverManager.getConnection

(“jdbc:oracle:oci:@ORACLEBD”, “user”, “passw”);

3.2. Conexión con mysql

Una cadena de conexión para mysql está dada por los siguientes pármetros:

• host: es la IP donde está la base de datos MySQL.

• port: es el puerto por donde escucha el servidor de base de datos, por defecto para MySQL es
el 3306.

• database: es el nombre de la base de datos.

• user: es el usuario de la base de datos.

• password: es la clave con que el usuario ingresa.

Así, la cadena es de la siguiente forma:


jdbc:mysql://host:port/database?user=name_user&password=secret_password;

Ejemplo:
String conec = “jdbc:mysql://localhost:3306/mibase?user=” + user + “&pasword=” +
password;

conexion = DriverManager.getConnection(conec);

POLITÉCNICO GRANCOLOMBIANO 4
3.3. Conexión con HSQL

Es la cadena más sencilla de todas las que se han explicado en este documento:
Class.forName(“org.hsqldb.jdbc.JDBCDriver”); // levantarndo el driver.

Connection conn = DriverManager.getConnection(“jdbc:hsqldb:file:nombreBD”,


“usuario”, “password”);.

4. Ejecución de operaciones sobre la base de datos


Dirección de la base de datos taller en HSQL de la lectura.

“D:/BD/autoria/taller”

Figura 1. Base de datos HSQL para taller


Fuente: elaboración propia

POLITÉCNICO GRANCOLOMBIANO 5
Figura 2. Segmento programa modelo en NetBeans
Fuente: elaboración propia

Figura 3. Consulta manual de los datos


Fuente: elaboración propia

POLITÉCNICO GRANCOLOMBIANO 6
package demo.conexiones;

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import javax.swing.JOptionPane;

/**

* @author alexis rojas

*/

public class DemoConexiones {

public static void main(String[] args) {

// parametros de conexión

String usr = "poli01";

String pwd = "poli1234";

String driver = "org.hsqldb.JDBCDriver";

String url = "jdbc:hsqldb:file:D:/DB/autoria/taller";

Connection con = null;

PreparedStatement pstm = null;

ResultSet rs = null;

try {

/*

***********

* PARTE 1 *

* *********

*/

POLITÉCNICO GRANCOLOMBIANO 7
// subir el driver

Class.forName(driver);

// establecer conexion

con = DriverManager.getConnection(url, usr, pwd);

/*

***********

* PARTE 2 *

* *********

*/

// definiendo un query.

String sql="SELECT emp_id, emp_nombre, emp_dpto from empleado";

// preparar sentencia a ejecutar

pstm = con.prepareStatement(sql);

// Luego se ejecuta la sentecia y se obtienen resultados

rs = pstm.executeQuery();

// presentar los resultados de los regisros de la tabla empelado

while (rs.next())

// mostrar campo a campo de cada registro

JOptionPane.showMessageDialog(null, rs.getInt(1)+", "+rs.


getString(2)+", "+rs.getInt(3));

} catch (Exception ex) {

ex.printStackTrace();

POLITÉCNICO GRANCOLOMBIANO 8
throw new RuntimeException(ex);

} finally {

try {

/*

* **********

* PARTE 3 *

* *********

*/

// Cierre de recursos en orden inverso a como se abrieron

if (rs != null) {

rs.close();

if (pstm != null) {

pstm.close();

if (con != null) {

con.close();

} catch (Exception ex) {

ex.printStackTrace();

throw new RuntimeException(ex);

}
Figura 4. Modelo genérico de un programa de conexión java
Fuente: elaboración propia

POLITÉCNICO GRANCOLOMBIANO 9
En la figura 5, se muestra el resultado de la consulta, usando el programa de conexión desarrollado en
Netbeans 8.2 para java.

Figura 5. Consulta de los datos usando el programa de conexión


Fuente: elaboración propia

4.1. Métodos específicos

• executeQuery(sql). Este método se utiliza para realizar consultas y devuelve un objetivo del tipo
ResultSet.

• executeUpdate(sql). Ejecuta las modificaciones a los datos de una tabla de la base de datos
a través de los comandos UPDATE, INSERT y DELETE. Devuelve el número de columnas
afectadas.

• execute(sql). Ejecuta instrucciones que por lo general devuelven un conjunto de resultados.


Se apoya en getResultSet(), getMoreResults() y getUpdateCount(), para continuar viendo
resultados.

POLITÉCNICO GRANCOLOMBIANO 10
5. ResultSet ()
Este método se encarga de extraer las columnas de una tupla de la tabla de la base de datos, usando el
método getX(columna), donde X corresponde al tipo de campo, pero en formato java.

6. PreparedStatement ()
Como su nombre lo indica, se usa para preparar los datos a insertar en una tabla de la base de datos.,
siempre y cuando el motor de la base de datos soporte la instrucción. Se ejecuta una vez establecida
la conexión.

Se crea el método con PreparedStatement ps = prepareStatement(sql);

7. Operaciones de manejo de datos transaccionales UPDATE


(INSERT, DELETE, UPDATE)

Se considera UPDATE a toda sentencia DML que inserta datos, borra datos o actualiza datos
de una o varias columnas de una tupla en una tabla de una base de datos. Entran dentro de esta
consideración las sentencias DDL CREATE, DROP ALTER, etc.

7.1. Ejecución de un INSERT

Con el siguiente segmento de código, describe el proceso de hacer una inserción de datos a la tabla
de departamentos de una base de datos, usando java.

Preparar la variable sql.


Sting sql = “INSER INTO dpto (dpto_id, dpto_nombre, depto_loc)”;

slq += “VALUES (?, ?, ?) “;

Preparar el STATEMENT.
ps = con.prepareStatement (sql);

Donde "ps" es el constructor de PreparedStatement() y "con" corresponde al constructor de la


conexión descritos anteriormente.

POLITÉCNICO GRANCOLOMBIANO 11
Preparar los datos para el VALUES.
ps.setInt(1, 15); // Columna 1, corresponde al código del dpto

ps.setString(2, “Investigación”); // Columna 2, corresponde al nombre del dpto

ps.setString(3, “Calle 63”); // Columna 3, corresponde a la localización.

El formato es: ps.setX (secuencia del campo, valor), donde X es el tipo de campo y secuencia,
corresponde a la posición de la columna en la tupla. Valor corresponde al valor que se debe asignar a la
columna, dependiendo del tipo.

Ejecución del update de inserción.

Int aplique = ps.executeUpate();

If (aplique == 1)

System.out.println(aplique + “fila insertada o.k ”);

con.commit(); // ejecuta la transacción en la BD

} else {

throw new RuntimeException (“Error insertando la fila”);

con.rollback(); // devuelve los datos a su estado original

7.2. Ejecución de un UPDATE

El procedimiento es similar y se tienen en cuenta los parámetros que deben cubrirse con la
interrogación. Ejemplo: en la tabla de departamentos cambiarle el nombre al departamento 15
llamado investigación, por "Investigación I+D+i”

POLITÉCNICO GRANCOLOMBIANO 12
String sql = “UPDATE dpto SET dpto_nombre = ?, where dpto_id = ?”;

ps = con.prepareStatement (sql);

ps.setString (15,"Investigación I+D+i");

int aplique = ps.executeUpate();

If (aplique == 1)

System.out.println(aplique + “fila correctamente actualizada”);

con.commit(); // ejecuta la transacción en la BD

} else {

throw new RuntimeException (“Error actualizando la fila”);

con.rollback(); // devuelve los datos a su estado original

7.3. Ejecución de un DELETE

Para borrar, se debe ejecutar un procedimiento semejante al de la actualización o la inserción,


teniendo cuidado de borrar el dato indicado.

Ejemplo: Borrar el departamento de Investigaciones de la tabla departamento que en este documento


se denominó “dpto”.

String sql = “ “;

Sql += “DELETE FROM dpto WHERE dpto_id = ?”;

ps = con.prepareStatement (sql);

ps.setInt(1,15); // Columna 1, dpto_id = 15.

int aplique = ps.executeUpate();

If (aplique == 1)

POLITÉCNICO GRANCOLOMBIANO 13
System.out.println(aplique + “fila correctamente borrada”);

con.commit(); // ejecuta la transacción en la BD

} else {

throw new RuntimeException (“Error borrando la fila”);

con.rollback(); // devuelve los datos a su estado original

8. PQL – Java Persistence Query Language


El lenguaje de consulta para datos persistentes en Java, define las consultas para las entidades y su
estado persistente. El lenguaje de consulta JPQL, permite escribir consultas portables que funcionan
independientemente del motor de base de datos.

El lenguaje de consulta utiliza una sintaxis similar a SQL para seleccionar objetos o valores basados en
tipos de esquema de resumen de entidades y las relaciones entre ellos.

8.1. Terminología del lenguaje

Esquema abstracto: Define la abstracción persistente del esquema (entidades persistentes, su estado
y sus relaciones) sobre las que funcionan las consultas. El lenguaje de consulta traduce las consultas
sobre esta abstracción del esquema persistente en consultas que se ejecutan sobre el esquema de
base de datos.

Tipo de esquema abstracto: Cada campo o propiedad persistente en una entidad tiene un campo de
estado correspondiente del mismo tipo en el esquema abstracto. El tipo de esquema abstracto de una
entidad se deriva de la clase de entidad y la información de metadatos proporcionada por anotaciones
de lenguaje Java.

Navegación: Es el recorrido que se hace sobre las relaciones para una expresión de lenguaje de
consulta.

Expresión de ruta: Una expresión que se desplaza al campo de estado o de relación de una entidad.

Campo de estado: Un campo persistente de una entidad.

Campo de relación: Campo persistente de una entidad cuyo tipo es el tipo de esquema abstracto de
la entidad relacionada.

POLITÉCNICO GRANCOLOMBIANO 14
JPQL no es SQL, aunque sean similares en algunas sentencias, dada su naturaleza orientada a
objetos. Se define como un lenguaje de consulta de entidades-objeto en vez de tablas y registros.

8.2. Entidades

Una entidad es un objeto ligero de dominio de persistencia. Normalmente, una entidad representa
una tabla en una base de datos relacional y cada instancia de entidad corresponde a una fila en
esa tabla. El artefacto de programación principal de una entidad es la clase de entidad, aunque las
entidades pueden utilizar clases auxiliares.

El estado persistente de una entidad se representa mediante campos persistentes o propiedades


persistentes.

8.3. Requisitos para las clases de entidad

Una clase de entidad debe cumplir estos requisitos:

• La clase debe anotarse con la anotación javax.persistence.Entity

• La clase debe tener un constructor público o protegido, sin argumentos. La clase puede tener
otros constructores

• La clase no debe ser declarada final. Ningún método o variable de instancia persistente debe ser
declarado final

• Si una instancia de entidad se pasa por valor como un objeto, la clase debe implementar la
interfaz Serializable

• Las entidades pueden extender tanto las clases de entidad como las de no entidad y las clases de
no entidad pueden extender las clases de entidad

• Las variables de instancia persistentes se deben declarar privadas, protegidas o privadas de


paquetes y solo se pueden acceder directamente mediante los métodos de la clase de entidad

• Los clientes deben acceder al estado de la entidad a través de métodos de acceso o


empresariales.

POLITÉCNICO GRANCOLOMBIANO 15
8.4. Campos persistentes

Son todos los campos no anotados javax.persistence.Transient o no marcados como transitorios de Java.
Las anotaciones de asignación de objetos relacionales, deben aplicarse a las variables de instancia.

8.5. Propiedades persistentes

Si la entidad utiliza propiedades persistentes, la entidad debe seguir las convenciones de método de
los componentes de JavaBeans.

Las propiedades de estilo JavaBeans usan métodos getter y setter que suelen tener el nombre de los
nombres de las variables de instancia de la clase de entidad.

Para cada propiedad de propiedad persistente del tipo Type de la entidad, hay un método getter
getProperty y setter method setProperty.

Si la propiedad es un valor booleano, puede utilizar isProperty en lugar de getProperty. Por ejemplo,
si una entidad cliente utiliza propiedades persistentes y tiene una variable de instancia privada
denominada firstName, la clase define un método getFirstName y setFirstName para recuperar y
establecer el estado de la variable de instancia firstName.

8.6. Tipos de sentencias

Las sentencias de manejo de datos del JPQLM son: SELECT, AGREGATE, DELETE y UPDATE.

SENTENCIA SELECT

Es la sentencia de mayor relevancia, su sintaxis funciona de la siguiente manera:

Select e from empleado e;

Donde el dominio definido en la cláusula FROM no es de una tabla sino de un objeto denominado
entidad y no utiliza "*", para extraer todas las columnas. En vez de ello utiliza el alias "e".

POLITÉCNICO GRANCOLOMBIANO 16
Si lo que se desea, es extraer solo unas columnas del objeto empleado, entonces se procede con el
alias de la siguiente forma:

Select e.nombre, e.salario from empleado e;

La cláusula FROM, es de las más relevantes dentro del modelo de consulta JPQL, porque es donde
se definen los objetos.

Ejemplo: Defina dos objetos y extraiga la información del objeto teléfono que haga pareja con el
objeto empleado.

En modo de SQL tradicional de una BD-Relacional, es:

Select p.id_telefono, p.numero, p.tipo, e.nombre_empleado

From empleado e, teléfono p

where e.id_epleado = p.id_telefono;

En modo de JPQL quedaría así:

select p

from empleado e JOIN telefono p;

SENTENCIAS AGREGADAS

Se utilizan 5 sentencias agregadas en la cláusula select que son: MAX, MIN, SUM, COUNT y AVG.

Ejemplo:

Select d.nombre, COUNT(e)

From empleado e JOIN depto d

GROUP BY d.nombre;

POLITÉCNICO GRANCOLOMBIANO 17
SENTENCIA UPDATE

La sentencia UPDATE es semejante en estructura a la sentencia update de SQL, sólo que funciona
de manera diferente, en cuanto trabaja con objetos, no con tablas.

Ejemplo:

UPTATE depto d

SET d.nombre = “Investigaciones I+D+i”

d.localizacion = “calle 63”

WHERE d.codigo = 15;

SENTENCIA DELETE

Funciona de manera similar al SQL-DELETE de los motores de bases relacionales. Ejemplo. Borrar
del objeto empleado todos los atributos donde el departamento sea nulo.

DELETE FROM empleado e

WHERE e.cod_dpto IS NULL;

RESUMEN:

JPQL es un framework de programación orientado a objetos de la plataforma java, que trabaja con
datos objeto-relacionales de una base de datos relacional tratada con orientación de objetos, para
aprovechar las características y propiedades de las clases persistentes en JAVA, que se denominan
ENTIDADES.

POLITÉCNICO GRANCOLOMBIANO 18
Referencias
[1] Córcoles Tendero J. Acceso A Datos [e-book]. 2015. Available from: e-Libro Premium, Ipswich,
MA. Accessed August 31, 2017.

https://login.loginbiblio.poligran.edu.co/login?url=http://search.ebscohost.com/login.aspx?direct=tru
e&db=edselb&AN=edselb.11046385&lang=es&site=eds-live

POLITÉCNICO GRANCOLOMBIANO 19
INFORMACIÓN TÉCNICA

Módulo: Conceptos fundamentales de la Transaccionalidad


Unidad 3: Herramientas para soluciones persistentes
Escenario 5: Lenguaje SQL de base de BDR y JPQL

Autor: Alexis Rojas Cordero

Asesor Pedagógico: Juan Pablo Sierra


Diseñador Gráfico: Felipe Puentes
Asistente: Ginna Quiroga

Este material pertenece al Politécnico Grancolombiano. Por


ende, es de uso exclusivo de las Instituciones adscritas a la Red
Ilumno. Prohibida su reproducción total o parcial.

POLITÉCNICO GRANCOLOMBIANO
POLITÉCNICO GRANCOLOMBIANO 20