Upload
frankzito-cuadroz-contreraz
View
258
Download
16
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