INSTITUCION EDUCATIVA SUPERIOR TECNOLGICO PBLICO CARLOS SALAZAR ROMERO TALLER DE PROGRAMACION CONCURRENTE Docente: Ing. Oscar Ascn Valdivia Nuevo Chimbote 2013 JAVA - NetBeans Ing. Oscar Ascn Valdivia 2 Qu es Cliente / Servidor? Dos aplicaciones, una de las cuales solicita servicios (cliente) y la otra procesa las solicitudes (servidor) Es independiente del hardware donde se ejecuta, cliente y servidor pueden ejecutarse en la misma PC En algunos casos los papeles se intercambian Cmo funciona una aplicacin Cliente / Servidor? Caractersticas Servicio: Relacin entre procesos Recursos compartidos: Un servidor y varios clientes Protocolos asimtricos: El cliente inicia el dilogo, los servidores esperan las solicitudes (pasivos) Transparencia de ubicacin: En la misma PC o en una PC a lo largo de una red Mezcla e igualdad: Software independiente del hardware o de la plataforma (Sistema operativo) Intercambios basados en mensajes: Cliente y Servidor interactan a travs de mensajes Encapsulamiento de servicios: El servidor es un especialista. Pueden ser sustitudos sin afectar al cliente (La interfaz de mensajes no debe cambiar) Facilidad de escalabilidad: Horizontalmente o Verticalmente Integridad: El cdigo de servidor y los datos de servidor se conservan centralmente. Los cliente mantienen su individualidad e independencia Clasificacin Los autores hacen distintas clasificaciones de los sistemas Cliente / Servidor Por los servicios que se atienden Por la distribucin de las unidades funcionales en capas Por la distribucin del volumen de las unidades funcionales Por los servicios que se atienden Servidores de archivos Servidores de bases de datos Servidores de transacciones Servidores de Groupware Servidores de objetos Servidores Web Cliente Servidor Solicita servicio Enva resultados Procesa solicitud Aplicacin VB, C#, PB, Java Sentencia SQL Ejecuta Sentencia SQL SQLServer MySql Server JAVA - NetBeans Ing. Oscar Ascn Valdivia 3 Capa de servicios Capa de usuario Capa de datos Por la distribucin de unidades funcionales en capas 1. Dos capas 2. Tres capas Fsico Lgico Fsico Lgico Capa de usuario Capa de datos Capa de servicios del negocio JAVA - NetBeans Ing. Oscar Ascn Valdivia 4 Cliente Servidor Middleware 3. N - capas Por la distribucin del volumen de las unidades funcionales 1. Servidor amplio o Cliente delgado (Thin Web Client) La mayor parte de la lgica del negocio se encuentra en el lado de los servidores El cliente bsicamente contiene los servicios de usuario (interfaz y lgica para validacin de ingreso de datos) Los servidores soportan la mayor carga de procesamiento de los algoritmos principales requeridos para el cumplimiento de las reglas del negocio 2. Cliente grueso (Thick Web Client) La mayor parte de la lgica del negocio se encuentra en el lado del cliente El cliente contiene los principales algoritmos, adems de la validacin del ingreso de datos Los servidores se dedican casi exclusivamente a procesar las solicitudes de datos de los clientes Elementos de construccin Tres elementos bsicos de construccin: Fsico Lgico Capa de usuario Capa de datos Capa de servicios del negocio Capa de servicios de Internet JAVA - NetBeans Ing. Oscar Ascn Valdivia 5 El elemento Cliente Corre en un SO con GUI o OOUI; Acceso a servicios distribuidos El elemento Servidor Corre sobre un paquete comercial de software servidor, Depende del SO El elemento Middleware Corre tanto en el Cliente como en el Servidor Tres categoras: Pilas de transporte (TCP/IP, NetBIOS, etc.) Sistemas Operativos de Redes (UNIX, Windows 2000, etc.) Middleware de servicios especficos (ODBC, ORB, etc.) Trabajo Prctico Java NetBeans Implementar un sistema que cumpla con los siguientes requerimientos: Menu de acceso a los elementos al sistema Trabajo con jTable (Mantenimiento al control) Traspasar informacin de un jFrame a otro jFrame Implementar el Sistema de Ventas JAVA - NetBeans Ing. Oscar Ascn Valdivia 6 CASO PRCTICO: Diseo de la Base de Datos Desarrollar: 1. Teniendo en cuenta el diagrama de casos de uso, disear la Base de datos y migrarla al SQL Server 20xx Reporte de ponentes Verificar parti cipante Verificar tipo partici pante Verificar matricul a Verificar seminario Regi strar partici pante Regi strar ti po parti cipante Regi strar matri cula Regi strar seminari o <<i ncl ude>> <<i ncl ude>> <<i ncl ude>> <<include>> <<i ncl ude>> <<i ncl ude>> <<i ncl ude>> Verificar ponentes Registrar ponentes Asignar ponentes al seminario <<include>> <<include>> <<include>> Reporte de Seminarios Coordinador Reporte de ponentes x seminario Reportes de participantes x tipo Asistente Reporte de Matriculados x Seminario JAVA - NetBeans Ing. Oscar Ascn Valdivia 7 Caso Prctico: Diseo de la Base de Datos La empresa Betos Producciones, le ha solicitado a Ud implementar un sistema informtico para llevar el control de las ventas de entradas a los diferentes eventos que estarn organizados por Betos Produccin, es necesario tener informacin de las personas que adquieren las entradas a los diferentes eventos, cada evento tiene una forma de pago diferente, es decir los costos son diferentes entre los eventos, esto depende de los tipos de entrada y del evento. Debe de existir un programa de todos los eventos por fecha indicando el lugar donde se realizara dicho evento y la hora, gracias a este sistema Betos Producciones llevara un mejor control de las ventas de entradas y de la programacin de los eventos. Betos desea colocar muchas terminales de ventas de entradas para de esta forma poder captar ms clientes. Se les pide que emita reportes de las ventas realizadas por cada evento y del ingreso por cada evento. Desarrollar: 1. Modelo conceptual, lgico y fsico de la Base de datos 2. Migrarlo al SGBD Sql Server 20xx Disear la siguiente Base de Datos en SQL Server (VENTAS.MDF) JAVA - NetBeans Ing. Oscar Ascn Valdivia 8 JAVA - NetBeans Ing. Oscar Ascn Valdivia 9 Java Database Connectivity JDBC es un conjunto de clases que permite a las aplicaciones escritas en Java conectarse a los sistemas de manejo de bases de datos estndares. Utilizando JDBC, las aplicaciones pueden recuperar y almacenar informacin en bases de datos utilizando el Lenguaje de Consultas Estructurado (SQL) Libreras para trabajar con acceso a datos: import java.sql.*; Clases de acceso a datos java.sql.Connection: Sirve para conectarse a una base de datos de SQL Server, etc. java.sql.Statement: Sirve para enviar comandos de ejecucin desde la aplicacin a la base de datos. java.sql. ResultSet: Sirve para almacenar los resultados devueltos desde la base de datos como consecuencia de alguna consulta realizada. Como conectarse desde java a SQLServer - ODBC Paso 1: Panel de Control \ ODBC JAVA - NetBeans Ing. Oscar Ascn Valdivia 10 Paso 2: Seleccionar la opcin agregar y seleccionar el origen de datos SQL Server Paso 3: Al seleccionar finalizar se mostrara la siguiente pantalla, en el cual llenaremos los siguientes datos Nombre del ODBC. odbcNombre BD Nombre del Servidor . / (local) JAVA - NetBeans Ing. Oscar Ascn Valdivia 11 Paso 4: Al presionar Siguiente, se mostrara la siguiente pantalla. Paso 5: Al presionar Siguiente, se mostrara la siguiente pantalla, donde deber de prender el primer Check(Establecer la siguiente BD como predeterminada), y luego seleccionar nuestra BD. Paso 6: Al presionar Siguiente, se mostrara la siguiente pantalla. OJO, nuestra BD JAVA - NetBeans Ing. Oscar Ascn Valdivia 12 Paso 7: Al presionar Finalizar, se mostrara la siguiente pantalla. Paso 8: Finalmente si quieren comprobar que todo est bien, presionar el botn Probar origen de datos y deber de mostrarse la siguiente pantalla. JAVA - NetBeans Ing. Oscar Ascn Valdivia 13 Paso 9: Ufffffffffffffffffffffffffffffffffff, por fin terminamos.. ya cree mi ODBC, que fcil estaba todo esto......., me gusta programar en Java. ODBC creado. JAVA - NetBeans Ing. Oscar Ascn Valdivia 14 Manejo de excepciones en Java Una excepcin es un evento que ocurre durante la ejecucin de un programa que rompe el flujo normal de ejecucin. Cuando se habla de excepciones nos referimos a evento excepcional. Muchas cosas pueden generar excepciones: Errores de hardware (falla de disco), de programa (acceso fuera de rango en arreglo), apertura de archivo inexistente, etc. Cuando se produce una excepcin dentro de un mtodo de Java, ste crea un objeto que contiene informacin sobre la excepcin y lo pasa al cdigo llamador. La rutina receptora de la excepcin es responsable de reaccionar a tal evento inesperado. Cuando creamos un objeto para la excepcin y lo pasamos al cdigo llamador decimos que lanzamos una excepcin (Throw an exception) Si el metodo llamador no tiene un manejador de la excepcin se busca hacia atrs en la pila de llamados anidados hasta encontrarlo. Decimos que el manejador atrapa la excepcin (catch the exception) Manejo de Excepciones El manejo de excepciones se logra con el bloque try try { // cdigo } catch (Exception e ) { // cdigo que se hace cargo del error reportado en e } El bloque try puede manejar mltiples excepciones: try { // cdigo } catch (StackError e ) { // cdigo para manejar el error de stack } catch (MathError me) { // cdigo para manejar el error matemtico indicado en me. } Captura de Excepciones (completo) JAVA - NetBeans Ing. Oscar Ascn Valdivia 15 El bloque try tiene la forma general: try { //sentencias } catch (e-type1 e ) { // sentencias } catch (e-type2 e ) { // sentencias } ... finally { //sentencias } La clusula finally es ejecutada con posterioridad cualquiera sea la condicin de trmino del try (sin o con error). Esta seccin permite dejar las cosas consistentes antes del trmino del bloque try. Ejemplo: Divisin de nmeros private void btndividirActionPerformed(java.awt.event.ActionEvent evt) { double n1,n2,d; try{ n1=Double.parseDouble(txtn1.getText()); n2=Double.parseDouble(txtn2.getText()); d=n1/n2; txtr.setText(String.valueOf(d)); }catch(Exception ex) { JOptionPane.showMessageDialog(rootPane, ex.getMessage()); } } Lgica correcta Controlar error JAVA - NetBeans Ing. Oscar Ascn Valdivia 16 Conectar el ODBC con JAVA package agenda; //Paso 1: importar las librerias de acceso a datos import java.sql.*; import javax.swing.JOptionPane; public class frmconectar extends javax.swing.JFrame { //Paso 2: crear variables de acceso a datos Connection con; public frmconectar() { initComponents(); } //Paso 3: Crear un mtodo para la conexin de la BD private void conectar() { try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con=DriverManager.getConnection("jdbc:odbc:odbcventas","sa",""); JOptionPane.showMessageDialog(rootPane,"Yeeeeeee, logre conectar Java con mi BD", "Felicidades",JOptionPane.INFORMATION_MESSAGE); }catch(Exception ex){ JOptionPane.showMessageDialog(rootPane, ex.getMessage()); } } private void btnconectarActionPerformed(java.awt.event.ActionEvent evt) { //Paso 4: llamar al metodo conectar conectar(); } JAVA - NetBeans Ing. Oscar Ascn Valdivia 17 Como conectarse desde java a MySql package conectarmysql; import javax.swing.JOptionPane; import java.sql.*; public class frmconectar extends javax.swing.JFrame { String bd="ventas"; String login="root"; String clave=""; String url="jdbc:mysql://localhost/"+bd; Connection con; private void btnconectarActionPerformed(java.awt.event.ActionEvent evt) { try { Class.forName("com.mysql.jdbc.Driver"); con=DriverManager.getConnection(url,login,clave); JOptionPane.showMessageDialog(null, "Conexion exitosa", "Base Datos", JOptionPane.INFORMATION_MESSAGE); } catch(Exception ex) { JOptionPane.showMessageDialog(null, "Conexion No exitosa", "Base Datos", JOptionPane.INFORMATION_MESSAGE); } } JAVA - NetBeans Ing. Oscar Ascn Valdivia 18 LENGUAJE DE MANIPULACIN DE DATOS 1. DEFINICIN: Se conoce con este nombre a un conjunto de sentencias que permite extraer o modificar los datos de las tablas almacenadas en una base de datos. Las cuatro sentencias principales del manejo de datos son: SELECT INSERT UPDATE DELETE Consultas Bsicas La Utilidad de las bases de datos relacionales es permitir a los usuarios consultar o acceder a los datos almacenados en ellas de una manera sencilla e intuitiva. BASE DATOS Resultados Requerimientos SQL Server ORACLE MySql Transact- Applicacin Cliente Visual Basic C# PowerBuilder Java L Modelo Datos JAVA - NetBeans Ing. Oscar Ascn Valdivia 19 TIPO DE SENTENCIAS: 2. SELECT 2.1. Definicin Obtiene las filas de la base de datos y permite realizar la seleccin de una o varias filas o columnas de una o varias tablas. hay tres componentes bsicos en la instruccin SELECT: SELECT, FROM y WHERE. 2.2. Sintaxis Bsica SELECT * | lista_columnas FROMtabla [ WHERE condicin_filas ] Donde: lista_columnas es la lista de columnas a mostrar en el resultado de la consulta. Si se especifica * se mostrarn todas las columnas de la tabla. condicin_filas es una expresin lgica que indica que las filas a mostrar son aquellas para las que el valor de la expresin es verdadero. 2.3. Clusulas 2.3.1. Select: Especifica las columnas que va a devolver la consulta. Argumentos: DISTINCT: Especifica que slo pueden aparecer filas exclusivas en el conjunto de resultados. Los valores NULL se consideran iguales a efectos de la palabra clave DISTINCT. 2.3.2. From Especifica las tablas de las que se van a obtener filas. La clusula FROM es necesaria excepto cuando la lista de seleccin slo contiene constantes, variables y expresiones aritmticas (no nombres de columna). 2.3.3. Where Especifica una condicin de bsqueda para restringir las filas que se van a devolver. Argumentos: LIKE: Determina si una cadena de caracteres dada coincide o no con un determinado modelo. Un modelo puede incluir caracteres normales y caracteres comodn. Carcter %: Cualquier cadena de cero o ms caracteres. Ejemplo: WHERE apellidos LIKE '%ana%' Busca todos los apellidos de los alumnos que contengan la palabra 'ana' en cualquier parte de los apellidos. BETWEEN: Especifica un intervalo inclusivo de valores. Utilice AND para separar los valores inicial y final. JAVA - NetBeans Ing. Oscar Ascn Valdivia 20 Formato de una consulta en Java - NetBeans 1. Llamar al mtodo conectar(Mtodo creado para la conexin de la Base de Datos) conectar(); 2. Crear la(s)variables que se vayan a utilizar en las consultas String valor=txtdireccion.getText(); 3. Utilizar el controlador de errorstry{}catch(Exception ex){} try{ 4. Crear la consulta SQL Select . From Where String sql="select * from cliente where dir_cli='"+valor+"'"; 5. Crear el objeto Statement stmt=con.createStatement(); 6. Ejecutar la consulta rs=stmt.executeQuery(sql); 7. Mostrar la informacion mostrar la data en un objeto JTable while(rs.next()) { String[]datos=new String[4]; datos[0]=rs.getString(1); datos[1]=rs.getString(2); datos[2]=rs.getString(3); datos[3]=rs.getString(4); tdatos.addRow(datos); } 8. Cerrar la conexion y el Statement con.close(); stmt.close(); }catch(Exception ex){ JOptionPane.showMessageDialog(rootPane,ex.getMessage()); } JAVA - NetBeans Ing. Oscar Ascn Valdivia 21 Ejemplos de consultas SQL con Java NetBeans 1. Mostrar todos los clientes cuya direccin sea igual a un valor ingresado por el usuario. package agenda; import javax.swing.table.*; import java.sql.*; import javax.swing.JOptionPane; public class frmconsulta extends javax.swing.JFrame { public Connection con; public ______________________ stmt; public ResultSet rs; DefaultTableModel tdatos=new DefaultTableModel(); public frmconsulta() { initComponents(); String titulos[]={"Codigo","Nombres","Apellidos","Titulos"}; tdatos.setColumnIdentifiers(titulos); _____________________________________ } private void conectar() { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con=DriverManager.getConnection("_____________________________","sa",""); JOptionPane.showMessageDialog(rootPane,"Conexion exitosa", "Base Datos", JOptionPane.INFORMATION_MESSAGE); }catch(Exception ex){ JOptionPane.showMessageDialog(rootPane,ex.___________________________()); } } private void btnmostrarActionPerformed(java.awt.event.ActionEvent evt) { conectar(); String valor=txtdireccion.getText(); try{ String sql="select * from cliente where dir_cli='"+valor+"'"; stmt=con.createStatement(); rs=stmt.executeQuery(sql); limpiartabla() while(rs.next()){ String[]datos=new String[4]; datos[0]=rs.getString(1); datos[1]=rs.getString(2); datos[2]=rs.getString(3); datos[3]=rs.getString(4); tdatos.addRow(datos); } JAVA - NetBeans Ing. Oscar Ascn Valdivia 22 con.close(); stmt.close(); }catch(Exception ex){ JOptionPane.showMessageDialog(rootPane,ex.getMessage()); } } private void limpiartabla() { int x=tdatos.getRowCount(); for (int i = 0; i < x; i++) { _________________________________________ } } } 2. Mostrar todos los datos de la tabla producto, donde el precio de venta este entre dos valores private void btnmostrarActionPerformed(java.awt.event.ActionEvent evt) { conectar(); String p1=txtp1.getText(); String p2=txtp2.getText(); try{ String sql="select * from producto where pre_pro between '"+ p1 +"' AND '"+ p2 +"'"; stmt=con.createStatement(); rs=stmt.executeQuery(sql); while(rs.next()){ _____________________________________; datos[0]=rs.getString(1); datos[1]=rs.getString(2); datos[2]=rs.getString(3); datos[3]=___________________; ___________________________________; } con.close(); stmt.close(); }catch(Exception ex){ JOptionPane.showMessageDialog(rootPane,ex.getMessage()); } } JAVA - NetBeans Ing. Oscar Ascn Valdivia 23 3. Mostrar todos los datos de la tabla cliente donde su apellido paterno empiece con algn carcter ingresado por el usuario private void btnmostrarActionPerformed(java.awt.event.ActionEvent evt) { int t; conectar(); String valor=txtapellidos.getText(); try{ String sql="select * from cliente where ape_cli like '"+valor+"%'"; stmt=con.createStatement(); rs=stmt.executeQuery(sql); while(rs.next()){ _______________________ _______________________ _______________________ _______________________ _______________________ _______________________ t=tbldatos.getRowCount(); txttotal.setText(String.valueOf(t)); } con.close(); stmt.close(); }catch(Exception ex){ JOptionPane.showMessageDialog(rootPane,ex.getMessage()); } } Trabajo Prctico Desarrollar las siguientes consultas SQL en el Lenguaje de programacin JAVA, utilizando la Base de Datos Ventas. 1. Mostrar todos los datos de la tabla venta donde la fecha de venta se encuentre entre un rango de valores ingresados por el usuario 2. Mostrar todos los datos de la tabla producto donde la descripcin empiece con algn carcter ingresado por el usuario. 3. Mostrar todos los datos de la tabla producto donde el precio de venta este entre dos valores 4. Mostrar Nombre, apellidos y direccin del cliente donde la direccin sea igual a una direccin ingresada 5. Mostrar Nombre y Apellidos de la tabla Vendedor donde el apellido paterno empiece con algn carcter ingresado 6. Seleccionar todos los campos de la tabla cliente donde su apellidos empiecen con algn carcter ingresado por el usuario y su direccin sea igual a una direccin seleccionada por el usuario. Mostrar el total de registros. JAVA - NetBeans Ing. Oscar Ascn Valdivia 24 7. Seleccionar todos los campos de la tabla producto donde la descripcin empiecen con algn carcter ingresado por el usuario y su precio de venta sea mayor a un valor ingresado por el usuario. Mostrar el total de registros. 8. Disear la siguiente venta y programar las consultas. Nota: Las consultas deben de estar inmersas dentro de una opcin de Menu (Consultas), las cuales se acceder con una pantalla de seguridad que se encuentre validado para 3 intentos. (debe de validar a los usuarios con una tabla usuario de la base de datos). JAVA - NetBeans Ing. Oscar Ascn Valdivia 25 CONSULTAS A MULTIPLES TABLAS En la sesin anterior las consultas solo hacen referencia a los datos almacenados en una sola tabla. En el caso de que las consultas requieran datos de ms de una tabla debemos utilizar las uniones. UNIENDO MULTIPLES TABLAS Una unin permite combinar columnas de diferentes tablas y devolver una tabla de de resultados. Por ejemplo se tiene las tablas Clientes y Facturas. Una consulta valida seria Mustrame el nombre de los clientes con sus respectivas facturas, la informacin pedida no se encuentra en ninguna de las dos tablas, por lo tanto es necesario utilizar las uniones para unir las tablas en las cuales esta la informacin requerida. Seleccionar Columnas de Multiples Tablas JOIN.- especifica las tablas que sern unidas y como se unirn. ON.- especifica la condicin de unidad. Consultar dos o mas tablas para producir un resultado Use claves primarias y forneas como condiciones de unin. Use columnas comunes para especificar unin entre tablas La tabla clientes tiene una columna cod_cli que es la clave primaria e identifica a un cliente. La tabla facturas tiene una columna cod_cli que es una clave fornea, e identifica al cliente que se le emiti la factura. INNER JOINS(Combinaciones Internas) Estas combinaciones usan un operador de comparacin para hacer coincidir las filas de dos tablas segn los valores de las columnas comunes de cada tabla. Ejemplo:1 Muestra el nombre de los clientes y sus facturas respectivas ordenadas por el nombre del cliente. Sin Alias select cliente.nom_cli,factura.num_fac,factura.fec_fac from cliente inner join factura on cliente.cod_cli=factura.cod_cli order by cliente.nom_cli; Con alias select c.cod_cli,nom_cli,num_fac,fec_fac from cliente as c inner join factura as f on c.cod_cli=f. cod_cli order by c.nom_cli; JAVA - NetBeans Ing. Oscar Ascn Valdivia 26 Ejercicios desarrollados de consultas SQL de mltiples tablas 1. Mostrar cdigo, nombre y apellidos del cliente y la fecha de venta, segn un apellidos seleccionado package agenda; import javax.swing.table.DefaultTableModel; import java.sql.*; import javax.swing.JOptionPane; public class frmconcliente extends javax.swing.JFrame { public _______________ con; public _______________ stmt; public _______________ rs; DefaultTableModel tdatos=new DefaultTableModel(); public frmconcliente() { initComponents(); ____________________________________________________________ tdatos.setColumnIdentifiers(titulos); ________________________________ direccion(); } private void conectar() { try { ______________________________________________________________ con=DriverManager.getConnection("_______________________________________"); JOptionPane.showMessageDialog(rootPane,"Conexion exitosa","Base Datos", JOptionPane.INFORMATION_MESSAGE); }catch(Exception ex){ JOptionPane.showMessageDialog(rootPane,ex.getMessage()); } } JAVA - NetBeans Ing. Oscar Ascn Valdivia 27 private void btnmostrarActionPerformed(java.awt.event.ActionEvent evt) { int t; conectar(); String valor=(String)cbodireccion.getSelectedItem(); try{ String sql="select c.nom_cli,c.ape_cli,c.dir_cli,v.fec_ven from cliente as c inner join venta as v on(c.cod_cli=v.cod_cli)where c.dir_cli = '"+valor+"'"; stmt=con.createStatement(); rs=stmt.executeQuery(sql); while(____________________________){ _________________________________ datos[0]=rs.getString(1); datos[1]=rs.getString(2); datos[2]=rs.getString(3); datos[3]=rs.getString(4); _______________________________ t=tbldatos.getRowCount(); txttotal.setText(String.valueOf(t)); } con.close(); stmt.close(); }catch(Exception ex){ JOptionPane.showMessageDialog(rootPane,ex.getMessage()); } } private void direccion() { conectar(); try{ String sql="select distinct dir_cli from cliente"; stmt=con.createStatement(); rs=stmt.executeQuery(sql); __________(rs.next()){ cbodireccion.addItem(rs.getString(1)); } con.__________________(); stmt.__________________(); }catch(Exception ex){ JOptionPane.showMessageDialog(rootPane,ex.getMessage()); } } JAVA - NetBeans Ing. Oscar Ascn Valdivia 28 2. Mostrar todos los campos de la tabla detventa donde el cdigo del producto sea igual a un valor seleccionado por el usuario, mostrar la cantidad de registros. 3. Consulta que muestre que clientes compraron entre un rango de fechas 4. Mostrar al vendedor que atendieron a los clientes y la fecha de venta segn el apellido del vendedor (bsqueda interactiva) 5. Mostrar los productos que se llev el cliente segn el nmero de factura seleccionado JAVA - NetBeans Ing. Oscar Ascn Valdivia 29 Trabajo Consultas SQL - JAVA Desarrollar un Sistema que contenga las siguientes pantallas y consultas a. Implementar la pantalla de seguridad, deber de estar validada con una tabla usuario, y adems deber de soportar solo 3 intentos. (4 ptos) b. Disear la siguiente Base de Datos (Hospital) (1 ptos) c. Disear un Menu que contenga 3 opciones, segn Ud. Crea conveniente. d. Una opcin del men deber de llamar al siguiente formulario, donde: Deber de permitir buscar a los pacientes de manera iterativa segn la opcin seleccionada. (2 ptos) Deber de mostrar los servicio que presta el hospital, estos servicios son de la tabla servicio (2 ptos) JAVA - NetBeans Ing. Oscar Ascn Valdivia 30 El botn Calcular: Ingresado el costo, deber de seleccionar un tipo de paciente (Asegurado tiene un descuento del 10% y los no asegurados tienen un incremento del 5%. (2 ptos) El botn agregar: agregara los elementos a la listas, adems deber de ir incrementndose el monto total. (2 ptos) El botn eliminar: al seleccionar a un paciente se eliminara y adems disminuir el monto total. (3 ptos) e. Mostrar a todos los pacientes que se atendieron (nombre, apellido, direccin, fecha cita) segn un servicio seleccionado, adems deber demostrar la cantidad de pacientes. (2 ptos) f. Mostrar a todos los pacientes que se atendieron segn la direccin del paciente, adems deber demostrar la cantidad de pacientes (2 ptos) JAVA - NetBeans Ing. Oscar Ascn Valdivia 31 ACCESO A DATOS SENTENCIA DE INSERCIN: INSERT Definicin Agrega o inserta una nueva fila a una tabla. Sintaxis Bsica INSERT INTO tabla (lista_columnas) VALUES (valor1, valor2,valorn) Donde: lista_columnas se trata de una lista de una o ms columnas en las que se insertarn los datos; lista_columnas debe estar entre parntesis y delimitada con comas. valor1, valor2,valorn son los valores que se van a insertar en la tabla. Clusulas Into: Es una palabra clave opcional que se puede utilizar entre INSERT y la tabla de destino. Values: Presenta la lista de valores de datos que se van a insertar. Debe haber un valor de datos para cada columna definida en lista_columnas (si se especific) o en la tabla. La lista de valores debe estar entre parntesis. Si los valores de la lista VALUES no estn en el mismo orden que las columnas de la tabla o no tienen un valor para cada columna de la tabla, debe utilizarse lista_columnas para especificar explcitamente la columna que almacena cada valor de entrada. SENTENCIA DE ACTUALIZACIN: UPDATE Definicin Cambia o modifica los datos de una o varias filas de una determinada tabla. Sintaxis Bsica UPDATE tabla SET Columna1 = valor1, Columna2 = valor2, .. Columnan = valorn [ WHERE condicin_filas ] Donde: lista_columnas se trata de una lista de una o ms columnas las cuales sern modificadas o actualizadas por la lista de valores las cuales deben de estar separadas por coma. tabla es el nombre de la tabla que va a eliminar las filas. valor1, valor2,valorn son los valores que se van a ser asignadas a las columnas. condicin_filas es una expresin lgica que indica que las filas que se van a modificar son aquellas para las que el valor de la expresin es verdadero. Clusulas Set: Especifica la lista de nombres de columnas o variables que se van a actualizar. Where: Especifica las condiciones que limitan a las filas que se actualizan. JAVA - NetBeans Ing. Oscar Ascn Valdivia 32 SENTENCIA DE ELIMINACIN: DELETE Definicin Quita o elimina las filas de una tabla. Sintaxis Bsica DELETE FROM tabla [ WHERE condicin_filas ] Donde: tabla es el nombre de la tabla que va a modificar los datos. condicin_filas es una expresin lgica que indica que las filas se van a eliminar son aquellas para las que el valor de la expresin es verdadero. Clusulas From: Se trata de una palabra clave opcional que se puede utilizar entre la palabra clave DELETE. Where: Especifica las condiciones que limitan a las filas que se eliminaran. Ejemplos Insertar un registro a la tabla cliente insert into Cliente values('1234','Oscar','Ascon','Lima') select * from cliente Modificar un registro de la table cliente update Cliente set nom_cli='Maria Ana',ape_cli='Ascon' where cod_cli='9' select * from cliente Eliminar un registro de la table cliente delete from Cliente where cod_cli='1234' select * from cliente Nota: Toda actualizacin a la Base de datos necesita de una instruccin Select para verificar el resultado JAVA - NetBeans Ing. Oscar Ascn Valdivia 33 ACTUALIZACION DE REGISTROS JAVA NETBEANS - SQLSERVER 1. Actualizar los registros de la tabla cliente package Ventas; //Paso 1: Importar las libreras de acceso a datos import _______________________; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; public class frmclientito extends javax.swing.JFrame { //Paso 2: Crear variables de acceso a datos Connection con; ResultSet rs; Statement stmt; //Paso 4: Crear una variable por cada campo de la tabla String co,no,ap,di; DefaultTableModel tdatos=new DefaultTableModel(); public frmclientito() { initComponents(); String titulos[]={"Codigo","Nombres","Apellidos","Direccion"}; tdatos.setColumnIdentifiers(titulos); tbldatos.setModel(tdatos); mostrar(); } JAVA - NetBeans Ing. Oscar Ascn Valdivia 34 //Paso 3: Crear la conexin a la Base de datos, utilizando ODBC //Para esto vamos a crear un mtodo para conectar la BD private void conectar(){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con=DriverManager.getConnection("___________________________"); } catch(Exception ex){ JOptionPane.showMessageDialog(rootPane, ex.getMessage()); } } //Paso 5: Crear un mtodo que nos permita darle valor a las variables de la tabla private void llenar() { co=txtco.getText(); no=______________________; ap=______________________; di=txtdi.getText(); } //Paso 6: Para ver el resultado de la actualziacion, necesitamos una instruccion Select private void mostrar(){ String sql; try{ conectar(); sql="select * from cliente"; stmt=con.createStatement(); rs=stmt.executeQuery(sql); while(_____________________){ String datos[]=new String[4]; datos[0]=rs.getString(1); datos[1]=rs.getString(2); datos[2]=rs.getString(3); datos[3]=rs.getString(4); ______________________________; } }catch(Exception ex){ JOptionPane.showMessageDialog(rootPane, ex.getMessage()); } } //Paso 7: Crear un mtodo para limpiar la tabla JAVA - NetBeans Ing. Oscar Ascn Valdivia 35 private void limpiartabla() { int x=tbldatos.getRowCount(); __________________________________________{ ________________________________ ; } } private void btngrabarActionPerformed(java.awt.event.ActionEvent evt) { int rpta; String sql; rpta=JOptionPane.showConfirmDialog(rootPane,"Deseas Grabar", "Grabar", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE); conectar(); try{ llenar(); sql="insert into cliente values('"+co+"','"+no+"','"+ap+"','"+di+"')"; stmt=con.createStatement(); stmt.execute(sql); con.close(); stmt.close(); limpiartabla(); mostrar(); }catch(Exception ex){ JOptionPane.showMessageDialog(rootPane, ex.getMessage()); } } Trabajo. 1. Disear un sistema que contenga una ventana de validacin del usuario, una ventana de men, luego implementar un formulario de mantenimiento por cada tabla de la base de datos ventas. JAVA - NetBeans Ing. Oscar Ascn Valdivia 36 Caso prctico: 1. Implementar la siguiente interfaz tanto para el cliente, Vendedor, Venta, Producto; utilizar diferentes prototipos de pantallas para su implementacin, deber permitir realizar mantenimiento y bsquedas a la Base de Datos. 2. Implementar la siguiente interfaz para el cliente, que permita realizar mantenimiento y bsquedas a la Base de Datos JAVA - NetBeans Ing. Oscar Ascn Valdivia 37 PROGRAMACION ORIENTADA A OBJETOS Clases Conceptos de clase y objeto Java es un lenguaje orientado a objetos puro, lo que significa que todo con lo que vamos a trabajar en este lenguaje son objetos. Un objeto es un agregado de datos y de mtodos que permiten manipular dichos datos, y un programa en Java no es ms que un conjunto de objetos que interaccionan unos con otros a travs de sus mtodos. Una clase es la definicin de las caractersticas concretas de un determinado tipo de objetos. Es decir, de cules son los datos y los mtodos de los que van a disponer todos los objetos de ese tipo. Por esta razn, se suele decir que el tipo de dato de un objeto es la clase que define las caractersticas del mismo. Sintaxis de definicin de clases La sintaxis bsica para definir una clase es la que a continuacin se muestra: class <nombreClase> { <miembros> } De este modo se definira una clase de nombre <nombreClase> cuyos miembros son los definidos en <miembros> Los miembros de una clase son los datos y mtodos de los que van a disponer todos los objetos de la misma. Un ejemplo de cmo declarar una clase de nombre A que no tenga ningn miembro es la siguiente: class A {} Campos: Un campo es un dato comn a todos los objetos de una determinada clase. Para definir cules son los campos de los que una clase dispone se usa la siguiente sintaxis dentro de la zona sealada como <miembros> en la definicin de la misma: <tipoCampo> <nombreCampo>; class Persona { string Nombre; // Campo de cada objeto Persona que almacena su nombre int Edad; // Campo de cada objeto Persona que almacena su edad string DNI; // Campo de cada objeto Persona que almacena su DNI } Para acceder a un campo de un determinado objeto se usa la sintaxis: <objeto>.<campo> JAVA - NetBeans Ing. Oscar Ascn Valdivia 38 Por ejemplo, para acceder al campo Edad de un objeto Persona llamado p y cambiar su valor por 20 se hara: p.Edad = 20; Mtodos: Un mtodo es un conjunto de instrucciones a las que se les asocia un nombre de modo que si se desea ejecutarlas basta referenciarlas a travs de dicho nombre en vez de tener que escribirlas. Dentro de estas instrucciones es posible acceder con total libertad a la informacin almacenada en los campos pertenecientes a la clase dentro de la que el mtodo se ha definido, por lo que como al principio del tema se indic, los mtodos permiten manipular los datos almacenados en los objetos. La sintaxis que se usa en Java para definir los mtodos es la siguiente: <tipoDevuelto> <nombreMtodo> (<parametros>) { <instrucciones> } Todo mtodo puede devolver un objeto como resultado de la ejecucin de las instrucciones que lo forman, y el tipo de dato al que pertenece este objeto es lo que se indica en <tipoDevuelto>. Si no devuelve nada se indica void, y si devuelve algo es obligatorio finalizar la ejecucin de sus instrucciones con alguna instruccin return <objeto>; que indique qu objeto ha de devolverse. Un ejemplo de cmo declarar un mtodo de nombre Cumpleaos es la siguiente modificacin de la definicin de la clase Persona usada antes como ejemplo: class Persona { string Nombre; // Campo de cada objeto Persona que almacena su nombre int Edad; // Campo de cada objeto Persona que almacena su edad string DNI; // Campo de cada objeto Persona que almacena su DNI void Cumpleaos() // Incrementa en uno de la edad del objeto Persona { Edad++; } } La sintaxis usada para llamar a los mtodos de un objeto es la misma que la usada para llamar a sus campos, slo que ahora tras el nombre del mtodo al que se desea llamar hay que indicar entre parntesis cules son los valores que se desea dar a los parmetros del mtodo al hacer la llamada. O sea, se escribe: <objeto>.<mtodo>(<parmetros>) Como es lgico, si el mtodo no tomase parmetros se dejaran vacos los parmetros en la llamada al mismo. Por ejemplo, para llamar al mtodo Cumpleaos() de un objeto Persona llamado p se hara: p.Cumpleaos(); // El mtodo no toma parmetros, luego no le pasamos ninguno JAVA - NetBeans Ing. Oscar Ascn Valdivia 39 Es importante sealar que en una misma clase pueden definirse varios mtodos con el mismo nombre siempre y cuando tomen diferente nmero o tipo de parmetros. A esto se le conoce como sobrecargar de mtodos, y es posible ya que cuando se les llame el compilador sabr a cual llamar a partir de <parmetros> pasados en la llamada. Creacin de objetos Operador new La utilidad del operador new, que precisamente es crear objetos y cuya sintaxis es: new <nombreTipo>(<parametros>) Este operador crea un nuevo objeto del tipo cuyo nombre se le indica y llama durante su proceso de creacin al constructor del mismo apropiado segn los valores que se le pasen en <parametros>, devolviendo una referencia al objeto recin creado. Hay que resaltar el hecho de que new no devuelve el propio objeto creado, sino una referencia a la direccin de memoria dinmica donde en realidad se ha creado. El constructor recibe ese nombre debido a que su cdigo suele usarse precisamente para construir el objeto, para inicializar sus miembros. Por ejemplo, a nuestra clase de ejemplo Persona le podramos aadir un constructor dejndola as: class Persona { string Nombre; // Campo de cada objeto Persona que almacena su nombre int Edad; // Campo de cada objeto Persona que almacena su edad string DNI; // Campo de cada objeto Persona que almacena su DNI void Cumpleaos() // Incrementa en uno la edad del objeto Persona { Edad++; } Persona (string nombre, int edad, string dni) // Constructor { Nombre = nombre; Edad = edad; DNI= dni; } } Como se ve en el cdigo, el constructor toma como parmetros los valores con los que deseemos inicializar el objeto a crear. Gracias a l, podemos crear un objeto Persona de nombre Jos, de 22 aos de edad y DNI 32734949 as: new Persona(Jos, 22, 32734949) En realidad un objeto puede tener mltiples constructores, aunque para diferenciar a unos de otros es obligatorio que se diferencien en el nmero u orden de los parmetros que aceptan, ya que el nombre de todos ellos ha de coincidir con el nombre de la clase de la que son miembros. De ese modo, cuando JAVA - NetBeans Ing. Oscar Ascn Valdivia 40 creemos el objeto el compilador podr inteligentemente determinar cul de los constructores ha de ejecutarse en funcin de los valores que le pasemos al new. Una vez creado un objeto lo ms normal es almacenar la direccin devuelta por new en una variable del tipo apropiado para el objeto creado. El siguiente ejemplo -que como es lgico ir dentro de la definicin de algn mtodo- muestra cmo crear una variable de tipo Persona llamada p y cmo almacenar en ella la direccin del objeto que devolvera la anterior aplicacin del operador new: Persona p; // Creamos variable p p = new Persona(Jose, 22, 32734949); // Almacenamos en p el objeto creado con new Constructor por defecto No es obligatorio definir un constructor para cada clase, y en caso de que no definamos ninguno el compilador crear uno por nosotros sin parmetros ni instrucciones. Es decir, como si se hubiese definido de esta forma: <nombreTipo>() { } Gracias a este constructor introducido automticamente por el compilador, si Coche es una clase en cuya definicin no se ha incluido ningn constructor, siempre ser posible crear uno nuevo usando el operador new as: Coche c = new Coche(); // Crea coche c llamando al constructor por defecto de Coche Hay que tener en cuenta una cosa: el constructor por defecto es slo incluido por el compilador si no hemos definido ningn otro constructor. Por tanto, si tenemos una clase en la que hayamos definido algn constructor con parmetros pero ninguno sin parmetros no ser vlido crear objetos de la misma llamando al constructor sin parmetros, pues el compilador no lo habr definido automticamente. Por ejemplo, con la ltima versin de la clase de ejemplo Persona es invlido hacer: Persona p = new Persona(); // ERROR: El nico constructor de persona toma 3 parmetros Herencia Concepto de herencia El mecanismo de herencia es uno de los pilares fundamentales en los que se basa la programacin orientada a objetos. Es un mecanismo que permite definir nuevas clases a partir de otras ya definidas de modo que si en la definicin de una clase indicamos que sta deriva de otra, entonces la primera -a la que se le suele llamar clase hija- ser tratada por el compilador automticamente como si su definicin incluyese la definicin de la segunda a la que se le suele llamar clase padre o clase base. Las clases que derivan de otras se definen usando la siguiente sintaxis: class <nombreHija>extends <nombrePadre> { <miembrosHija> } JAVA - NetBeans Ing. Oscar Ascn Valdivia 41 A los miembros definidos en <miembrosHijas> se le aadirn los que hubisemos definido en la clase padre. Por ejemplo, a partir de la clase Persona puede crearse una clase Trabajador as: class Trabajador extends Persona { public int Sueldo; public Trabajador(string nombre, int edad, string nif, int sueldo) : base(nombre, edad, nif) { Sueldo = sueldo; } } Los objetos de esta clase Trabajador contarn con los mismos miembros que los objetos Persona y adems incorporarn un nuevo campo llamado Sueldo que almacenar el dinero que cada trabajador gane. Un ejemplo que pone de manifiesto cmo funciona la herencia es el siguiente: class Persona { public string Nombre; // Campo de cada objeto Persona que almacena su nombre public int Edad; // Campo de cada objeto Persona que almacena su edad public string DNI; // Campo de cada objeto Persona que almacena su DNI void Cumpleaos() // Incrementa en uno de edad del objeto Persona { Edad++; } public Persona (string nombre, int edad, string nif) // Constructor de Persona { Nombre = nombre; Edad = edad; NIF = nif; } } class Trabajador extends Persona { public int Sueldo; // Campo de cada objeto Trabajador que almacena cunto gana Trabajador(string nombre, int edad, string dni, int sueldo) { // Inicializamos cada Trabajador en base al constructor de Persona Sueldo = sueldo; } JAVA - NetBeans Ing. Oscar Ascn Valdivia 42 Programacin Orientada a Objetos Diagrama de clases package Clases; import javax.swing.JOptionPane; public class Cliente { private String dni; private String nombre; private String apellido; private String direccion; private double sueldo; public Cliente() { } public Cliente(String dni, String nombre, String apellido, String direccion, double sueldo) { this.dni = dni; this.nombre = nombre; this.apellido = apellido; this.direccion = direccion; this.sueldo = sueldo; } public String getApellido() { return apellido; } public void setApellido(String apellido) { this.apellido = apellido; } public String getDireccion() { return direccion; } public void setDireccion(String direccion) { this.direccion = direccion; } public String getDni() { return dni; } public void setDni(String dni) { this.dni = dni; } Cliente dni : String nombre : String apellido : String direccion : String sueldo : double Agregar() Calcular() JAVA - NetBeans Ing. Oscar Ascn Valdivia 43 public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public double getSueldo() { return sueldo; } public void setSueldo(double sueldo) { this.sueldo = sueldo; } ///////////////Metodos//////////////// public void agregar() { JOptionPane.showMessageDialog(null, "Cliente: "+nombre+" "+apellido,"Agregar", JOptionPane.INFORMATION_MESSAGE); } public double descuento() { double x; x=sueldo*0.10; return x; } } Formulario Cliente package Formularios; import Clases.Cliente; public class frmcliente extends javax.swing.JFrame { private Cliente oc=new Cliente(); JAVA - NetBeans Ing. Oscar Ascn Valdivia 44 private void llenar() { oc.setDni(txtdni.getText()); oc.setNombre(txtnom.getText()); oc.setApellido(txtape.getText()); oc.setDireccion(txtdir.getText()); oc.setSueldo(Double.parseDouble(txtsue.getText())); } private void btnagregarActionPerformed(java.awt.event.ActionEvent evt) { llenar(); oc.agregar(); } private void btndescuentoActionPerformed(java.awt.event.ActionEvent evt) { llenar(); txtdes.setText(String.valueOf(oc.descuento())); } } Practica: 1. Implementar el siguiente diagrama de clases (Usar clases de acceso a datos) 2. Implementar el diagrama de clases de su proyecto Alumno codigo : String nombre : String apellido : String email : String Asignardatos() Agregar() Secretaria dni nombre apellido sueldo afiliacion Asignardatos() Calcularsueldo() Matricula Codigo Fecha Observacion 1..* 1 1 1..* Curso codigo descripcion costo Asignardatos() Agregar() 1 1..* 1 1..* 1 1..* 1..* 1