lpi_sesion_08 -11 conexion bd.pdf
TRANSCRIPT
-
LENGUAJE DE PROGRAMACIN I
Sesiones 8 - 11
Conexin con BD
-
Caso
ya hemos realizado el diseo de las GUIs y capturado la informacin ingresada, pero
Lenguaje de Programacin I 2
si queremos validar otros datos, almacenar o posteriormente consultar la informacin
ingresada seguir de la misma forma?
-
Uso de Bases de datos
MySQL
JDBC definicin
El API JDBC clases e interfaces
Empezando a trabajar con JDBC
Ejercicio: Crear un registro.
Aplicaciones
Usode serializacin
Lenguaje de Programacin I 3
Contenido
Logros de la Unidad
Crear aplicaciones de manejo de bases de datos
-
Qu es una base de datos?
Una base de datos es un almacn que nos permite guardar grandes cantidades de informacin relacionada.
El software que permite a sus usuarios crear, mantener y controlar el acceso a una base de datos relacional, se denomina RDBMS (Relational DataBase Management System) y utiliza el lenguaje de consulta SQL
-
SQL
IMPLEMENTACIN
DDL Lenguaje de Definicin
de Datos
DML Lenguaje de Manipulacin
de Datos
CREATE
DROP
ALTER SELECT
INSERT UPDATE
DELETE
SQL: Componentes
-
http://www.mysql.org/
Sistema gestor de base de datos multiplataforma
Desarrollado en C
Licencia cdigo abierto GPL
Soporte de un subconjunto de SQL 99
Dispone de driver JDBC para Java
Herramienta interactiva para hacer consultas y crear bases de datos
abre por defecto el puerto 3306 para aceptar posibles conexiones
Para crear la base de datos dispone de una GUI: Workbrench
Lenguaje de Programacin I 6
-
Para MySQL descargar los archivos (Community Edition) y seguir las opciones, al terminar Configurar y asignar la contrasea al usuario root como mysql.
Para Workbench descargamos el instalador y seguimos la opciones por default. Finalmente iniciamos la aplicacin.
Lenguaje de Programacin I 7
Instalacin
mysql
-
Lenguaje de Programacin I 8
MySQL Workbench
En la zona de Scratch o Query escribiremos el cdigo SQL.
Consola / Historial
Bases creadas
-
En el MySQL Workbench abre el archivo ciberfarma.sql y en una nueva pestaa realiza las sentencias propuestas:
Repaso. Sentencias SQL
1. lista el contenido de la tabla productos
2. El da de hoy, se realiza una venta con el documento "V0001
3. Disminuye del stock de la tabla productos, segn la cantidad vendida
-
Dado el siguiente formulario, utilizar BD para la validacin e ingreso
Lenguaje de Programacin II 10
Aplicacin
-
Java DataBase Connectivity es la API (librera) estndar de acceso a base de datos desde Java
Est incluida en Java SE (Standard Edition)
Las clases necesarias estn agrupadas en el paquete java.sql
Aplicaciones con BD en Java
JDBC
Conectarnos a una BD
Ejecutar instrucciones SQL: INSERT, DELETE, UPDATE, SELECT
Manipular los datos de una consulta
-
Los pasos al desarrollar aplicaciones con base de datos son:
Conexin a BD
Inicio
Fin
Cargar Driver JDBC
Class.forName()
Establecer Conexin a BD
Connection
Crear Objeto
Statement
Ejecutar sentencia SQL - usando
el objeto Statement
Statement
Prepared
Statement
Callable
Statement
Procesar el conjunto de resultados
ResultSet
Liberar los recursos
-
Estructura del proyecto
Lenguaje de Programacin I 13
Paquete donde
estableceremos la
conexin con la base
de datos
Carpeta de Libreras
adicionales
Paquete donde
ubicaremos los objetos de
transferencias de datos:
Clases
Paquete donde
desarrollaremos la parte
lgica de procesamiento:
servicios
-
Esta clase define el driver de base de datos a usar, mediante la clase:
Class.forName("com.mysql.jdbc.Driver"); // MySQL
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //SQL
Y retorna la conexin con la BD mediante el mtodo getConnection().
con = DriverManager.getConnection(url, login, password);
Donde:
url especifica la ubicacin de la base de datos; y
login y password son los datos de acceso al servidor
Estableciendo la conexin
Lenguaje de Programacin I 14
Cargar Driver JDBC
Class.forName()
Establecer Conexin a BD
Connection
-
Plantilla de Conexin con MySQL
public class MySQLConexion {
public static Connection getConexion(){ Connection con = null; try {
Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost/nombrebd"; String usr = "root"; String psw = "mysql"; con = DriverManager.getConnection(url,usr,psw);
} catch (ClassNotFoundException ex) { System.out.println("No hay Driver!!");
} catch (SQLException ex) { System.out.println("Error con la BD");
} return con;
} }
-
Para conectarse a una base de datos concreta, es necesario un archivo conector o driver JDBC
El driver es un fichero JAR que se aade a la aplicacin como cualquier otra librera pulsando clic derecho (no necesita instalacin adicional)
Cargando el Driver (Conector)
-
En este paquete ubicamos las clases que crearan los objetos de intercambio de datos a partir de las tablas (DTO). Ejemplo:
Entidades, Datos o Beans
package beans;
public class UsuariosDTO { //atributos privados //constructores //mtodos set y get //otros mtodos pblicos }
-
Mantenimientos
Lenguaje de Programacin I 18
Dentro de este paquete, realizaremos las clases que den soporte a las sentencias SQL correspondientes para cada clase bean.
Estas clases contendrn los mtodos que permitan encapsular las sentencias SQL para el mantenimiento: agregar, modificar, listar, eliminar. Ej:
package mantenimientos; public class GestionUsuarios { public Usuarios validaUsuario(String usuario, String clave) { } public int eliminaUsuario(String usuario) { } // otros mtodos }
-
Para definir una sentencia SQL se usa un objeto Statement a la conexin. Esta puede ser:
Lenguaje de Programacin I 19
Sentencias SQL
SQL esttico en tiempo de ejecucin, no
acepta parmetros
Acepta parmetros. Usado para ejecutar la
misma sentencia muchas veces (la prepara).
Llamada a procedimientos almacenados
Statement stmt = conn.createStatement();
PreparedStatement ps =
conn.prepareStatement(...);
CallableStatement s =
conn.prepareCall(...);
-
Plantilla para uso de MySQL Connection con = null; PreparedStatement pst = null; rs = ; // valor segn el tipo de resultado try { con = MySQLConexion.getConexion(); String sql = "..."; // sentencia sql pst = con.prepareStatement(sql); // OJO. Definir datos si la sentencia recibe parmetros rs = pst.execute.......; // depende del tipo de sentencia // acciones opcionales Ej: Mensajes o actualizar lista } catch (Exception e) { System.out.println("Error en la sentencia "); } finally { try { if (pst != null) pst.close(); if (con != null) con.close(); } catch (SQLException e) { System.out.println("Error al cerrar "); } }
-
La ejecucin de la sentencia depender del tipo:
Lenguaje de Programacin I 21
Explicacin
Para Sentencia a usar
Valor devuelto Tipo de Ejecucin
Consultas, Listados
SELECT ResultSet (conjunto de resultados o null
executeQuery()
Insertar, Modificar
INSERT, UPDATE, DELETE
int (nmero de filas realizadas o 0)
executeUpdate()
-
Por ejemplo:
Sentencia en MySQL:
Sentencia en clase mantenimiento:
Cada ? Representa un parmetro (empezando desde 1) el cual se reemplazar con los valores respectivos, Ej:
Lenguaje de Programacin I 22
Parmetros
select * from tb_usuarios where usuario = 'U001' and clave = '10001';
select * from tb_usuarios where usuario = ? and clave = ?;
public Usuarios validaUsuario(String usuario, String clave) { String sql = "select * from tb_usuarios where usuario = ? and clave = ?"; pst = con.prepareStatement(sql); pst.setString(1, usuario); pst.setString(2, clave);
Para otros tipos de dato usaremos. Ej: pst.setInt(3, cantidad); pst.setDouble(4, precio);
-
Dado el siguiente formulario, utilizar BD para la validacin e ingreso
Lenguaje de Programacin II 23
Aplicacin
-
Ejemplo de Formulario y mtodo respectivo en la clase Gestin que permitan aadir un usuario a la tabla tb_usuario
Plantilla de registro
-
Consulta de Datos
-
Importante.!!! Para almacenar los datos devueltos, usaremos colecciones, es decir ArrayList de acuerdo a la Clase de transferencia. Ej. lista.add(new Producto(cod, des, pre, estado));
Involucran la ejecucin se sentencias SELECT, mediante un executeQuery(), obteniendo un objeto ResultSet que representa el resultado.
Las consultas o reportes
El mtodo next() del ResultSet, hace que el puntero avance al siguiente registro. Si lo consigue devuelve true.
Para obtener los datos de cada registro, usamos los mtodos de acceso a las columnas. Ej. while (rs.next()){
cod = rs.getString(1); precio = rs.getDouble(3); }
-
Los listados se pueden emplear en diversos procesos como:
Ejemplo
-
Ejemplo de consulta de Productos
Plantilla de listado
Listado de Productos
-
Ejemplo: Formulario de ventas por vendedor
Plantilla de listado con parmetros
-
Realiza un listado por fecha de venta
Actividades
-
Procedimientos almacenados
-
Los procedimientos y funciones almacenadas son rutinas que encapsulan un conjunto de comandos SQL almacenndolos en el servidor.
Esto permite que una vez creado, los clientes no necesitan relanzar los comandos individuales, en su lugar referirse al procedimiento.
Algunas situaciones en que los procedimientos almacenados pueden ser particularmente tiles son:
Cuando mltiples aplicaciones se escriben en distintos lenguajes o plataformas, pero necesitan realizar la misma operacin.
Cuando la seguridad es muy importante. Debido a que las aplicaciones no obtendran ningn acceso directo a las tablas de la base de datos, slo pueden ejecutar algunos procedimientos almacenados.
-
Procedimiento que realiza una consulta en la tabla tb_usuarios, tomando comodatos los parmetros de entrada usr y pas.
Ejemplos
-- sentencia
DELIMITER $$
CREATE PROCEDURE usp_validaUsuario(usr char(4), pas char(5))
BEGIN
select * from tb_usuarios
where usuario = usr and clave = pas;
END
$$
DELIMITER ;
-- llamado
CALL usp_validaUsuario ('U001','10001');
-
Crear un USP que devuelva la cantidad de productos de un tipo determinado:
Ejemplos
-- sentencia usando USP, con variable de entrada y salida
DELIMITER // CREATE PROCEDURE usp_qtipos (IN tipo int, OUT cant int) BEGIN select COUNT(*) INTO cant from tb_productos where idtipo = tipo; END // DELIMITER ;
-- llamado
CALL usp_qtipos (1, @cantidad); SELECT @cantidad;
-- 1 sentencia sin USP select COUNT(*) from tb_productos where idtipo = 1;
-
1. Crea un USP para agregar el registro de una venta
2. Crea un USP que muestre todas las ventas realizadas en la fecha indicada como parmetro.
3. Crear un USP que devuelva el importe pagado en una venta indicada como parmetro
Propuestos
-
Disea el formulario de Acceso y los mtodos necesarios que permitan validar un usuario y clave de la tabla tb_usuario usando procedimientos almacenados.
Considera que el mtodo debe recibir las variables usuario y clave y de existir devuelve un objeto de tipo Usuario y en caso contrario devuelve null.
Aplicacin
-
La clase CallableStatement
Permite hacer llamadas a los procedimientos almacenados de la base de datos.
Permite parmetros de entrada IN (como el PreparedStatement), parmetros de entrada-salida INOUT y parmetros de salida OUT
Ej. Llamada a un procedimiento con parmetros de ingreso:
CallableStatement cst = null;
try {
String sql = "{call usp_validaUsuario (?,?)}";
cst = con.prepareCall(sql);
cst.setString(1, usuario);
cst.setString(2, clave);
rs = cst.executeQuery();
-
La clase CallableStatement
Ej: Llamada a un procedimiento con parmetros de entrada y salida.
Connection con = null;
CallableStatement cst = null;
try {
con = MySQLConexion.getConexion();
String sql = "{call usp_cuentatipos (?,?)}";
cst = con.prepareCall(sql);
cst.setInt(1, tipo); // dato de entrada en el USP
cst.registerOutParameter(2, java.sql.Types.INTEGER);
cst.execute();
int cantidad = cst.getInt(2); // dato devuelto en el USP
-
Utilizando el formulario ListadoVtaxFcha, realiza un reporte de las ventas de la fecha indicada en el control. Utiliza adems el procedimiento almacenado creado anteriormente.
Mejora la actividad de manera que si no ingreso una fecha, se muestren todos los ventas
Actividad
-
http://enreas.wikia.com/wiki/Gu%C3%ADa_Pr%C3%A1ctica_MySQL_5.1/Cap%C3%ADtulo_11:_Procedimientos_almacenados
Referencia