40
LENGUAJE DE PROGRAMACIÓN I Sesiones 8 - 11 Conexión con BD

LPI_sesion_08 -11 Conexion BD.pdf

Embed Size (px)

Citation preview

  • 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