iv unidad lenguaje de programacion ii

40
7/21/2019 IV Unidad Lenguaje de Programacion II http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 1/40 INTRODUCCIÓN a) Presentación y contextualización En esta Unidad aprenderás a construir aplicaciones de escritorio con conexión a base de datos utilizando la tecnología JDBC. b) Competencias Elabora una aplicación informática con conexión a base de datos y POO usando la tecnología JDBC. c) Capacidades 1. Comprende la forma cómo trabaja la tecnología JDBC (Java Database Connetivity) al conectarse con una base de datos 2. Maneja las principales interfaces del JDBC para el manejo y procesamiento de datos de una tabla. 3. Aplica la programación orientada a objetos al programar una aplicación con base de datos. 4. Aplica sentencias precompiladas con los datos de una tabla. d) Actitudes Cumple con responsabilidad la presentación de los trabajos encomendados a través de la plataforma virtual. Desarrolla la creatividad, la innovación, la actitud emprendedora y el respeto a la honestidad intelectual. a) Presentación de ideas básicas y contenido esenciales de la Unidad.

Upload: rudy-hacker-tamayo-guardia

Post on 04-Feb-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 1/40

INTRODUCCIÓN

a) Presentación y contextualizaciónEn esta Unidad aprenderás a construir aplicaciones de escritorio con

conexión a base de datos utilizando la tecnología JDBC.

b) CompetenciasElabora una aplicación informática con conexión a base de datos y

POO usando la tecnología JDBC.

c) Capacidades1. Comprende la forma cómo trabaja la tecnología JDBC (Java

Database Connetivity) al conectarse con una base de datos

2. Maneja las principales interfaces del JDBC para el manejo y

procesamiento de datos de una tabla.

3. Aplica la programación orientada a objetos al programar una

aplicación con base de datos.

4. Aplica sentencias precompiladas con los datos de una tabla.

d) Actitudes Cumple con responsabilidad la presentación de los trabajos

encomendados a través de la plataforma virtual.

Desarrolla la creatividad, la innovación, la actitud emprendedora y el

respeto a la honestidad intelectual.

a) Presentación de ideas básicas y contenido esenciales de la

Unidad.

Page 2: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 2/40

La Unidad de Aprendizaje 04: Desarrollo De Aplicaciones De

Escritorio Con JDBC comprende el desarrollo de los siguientes temas :

Tema 01: Introducción a la Tecnología JDBC

Tema 02: Estableciendo una Conexión de Datos

Tema 03: Aplicando POO para la Gestión de Operaciones con

una Base de Datos

Tema 04: La interface PreparedStatement

Page 3: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 3/40

Tema 1: La Introducción a la Tecnología JDBC

Java Database Connectivity (JDBC) es una interface de acceso a basesde datos estándar SQL que proporciona un acceso uniforme a una gran

variedad de bases de datos relacionales desde Java.

FUNCIONES DEL JDBC

1. Establecer una conexión con una base de datos

2. Enviar una consulta SQL a la base de datos

3. Procesar los resultados de la consulta.

Dado a que JDBC contien un conjunto de interfaces no implementadas,

requiere de una implementación especifica de acuerdo al tipo de gestor de

base de datos con la cual vayamos a trabajar, esta implementación esconocida con el nombre de driver, esto otorga una gran ventaja al JDBC al

poder trabajar con múltiples orígenes de base de datos, lo único que se

requiere es contar con el driver especifico.

CARACTERÍSTICAS Y LOS DRIVERS DEL JDBC

Page 4: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 4/40

Los Drivers también llamados manejadores, son un conjunto de clases

provistas por el fabricante, el gestor de base de

datos, que implementa las clases e interfaces

del API JDBC necesarias para que unaaplicación Java pueda conectarse con una BD,

la misión del manejador será traducir

comandos estándar del API JDBC al protocolo

nativo de esa base de datos.

Si queremos cambiar el sistema de BD que empleamos lo único que

deberemos hacer es reemplazar el antiguo manejador por el nuevo, y

seremos capaces de conectarnos a la nueva BD.

LAS INTERFACES Y CLASES DEL JDBC

JDBC incluye un conjunto de interfaces y clases que permiten el manejo de

base de datos en Java, esta tecnología está basada fundamentalmente en

las siguientes interfaces:

a. Driver

b. DriverManager

c. Connection

d. Statement

Page 5: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 5/40

e. PreparedStatement

f. CallableStatement

g. ResultSet

REGISTRAR DE UN DRIVER (MANEJADOR)

Registrar un manejador no es más que cargar en memoria una clase que

implementa el interfaz Driver , clase proporcionada por los desarrolladores

de la base de datos.

Podemos registrar el Driver empleando el cargador de clases. Para ello,

empleamos, al igual que para cargar cualquier otra clase, el método

forName(String clase) de la clase Class .

Class.forName("com.mysql.Driver");

INTERFACE DRIVER

Es responsabilidad del desarrollador del driver proveer una clase que

implemente esta interface, y será responsabilidad del DriverManager llamar

al método connect de los drivers registrados para intentar establecer la

conexión con la base de datos.

CLASE DRIVERMANAGER

Como su nombre indica, esta clase es la gestora de los diversos drivers

(manejadores) que existen en nuestra aplicación. Es posible que sea

necesario que en una misma aplicación se tenga varios manejadores para

acceder a varias bases de datos.

Page 6: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 6/40

Los métodos que más nos interesan de esta clase son:

static Connection getConnection(String url); static Conn ection getConnection(Stri ng u r l, Str in g user , String password) .

Estos métodos intentan establecer conexión con la base de datos que le

indiquemos en el campo url, empleando para ello, todos los manejadores

que hemos registrado. La diferencia entre un método y el otro, obviamente,

es que en uno sólo se especifica la base de datos a la que nos queremosconectar, mientras que en el otro se indica también el nombre de usuario de

la base de datos y su password.

Sintaxis de los URL del JDBC

Los URL (Uniform Resource Locator) de JDBC identifican una base de

datos, y un protocolo de conexión a esta, de un modo único. Toda URL de

JDBC consta siempre de tres partes:

Protocolo:

subprotocolo:subnombre.

Page 7: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 7/40

Ejemplo: "jdbc:odbc:usuarios"

Veamos cada una de las partes del URL:

1. Protocolo de la conexión. Siempre es jdbc.

2. Subprotocolo de la conexión. Identifica el tipo de mecanismo deconexión que emplearemos para acceder a la base de datos.

3. Subnombre, identifica la base de datos con la que queremos

establecer una conexión.

Métodos de la Clase DriverManager

Todos los métodos que encontramos en esta clase son estáticos (no

requieren instancia para poder utilizarlo) y se comentan brevemente a

continuación:

Método DescripciónConnection getConnection(Stringurl)

Establece una conexión con la base de datos identificada por la URLde JDBC que se pasa por parámetros.

Connection getConnection(Stringurl, Properties info)

Establece una conexión con la base de datos identificada por la URLde JDBC que se pasa por parámetros.

Connection getConnection(Stringurl, String usuario, Stringcontraseña)

Establece una conexión con la base de datos pero en su segundoparámetro especifica propiedades que posee el driver, como puede serla base de datos, el usuario, la contraseña, etc. Estas propiedades seorganizan en pares propiedad/valor.

void println(String mensaje) Escribe un mensaje en el flujo de actividad actual void setLoginTimeout(intsegundos)

Establece el tiempo de espera que el driver utilizará para realizar unaconexión.

INTERFACE CONNECTION

Page 8: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 8/40

Representa una conexión con la base de datos. Permite crear objetos que

representan consultas que se ejecutarán en la base de datos, y permite

acceder a información sobre las posibilidades del manejador JDBC.

En esta tabla recogemos los principales métodos de la interfaz Connection .

Sobre muchos de ellos volveremos a hablar más adelante.

Métodos de la Interfaz Connection Método Descripción

void close() Cierra una conexión, liberando todos los recursos asociados a la misma.

boolean isClosed () Devuelve verdadero, si la conexión está cerrada

boolean isReadOnly() Devuelve true, si la conexión es de sólo lectura

PreparedStatementprepareStatement(Str ing sql)

Crea un objeto PreparedStatement que va a permitir enviar y ejecutar sentenciasSQL parametrizadas a la base de datos correspondiente.

PreparedStatement

prepareStatement(Str ing sql ,

int t ipo ResultSet , int

t ipoConcurrencia)

Igual que el método anterior, pero permite especificar las características delResultSet que se obtendrá a la hora de ejecutar el objeto PreparedStatementcorrespondiente.

void commit() Hace permanentes los cambios que se realizaron desde el último commit orollback.

Statement createStatement() Crea un objeto de tipo Statement.

bolean getAutoCommit() Indica si está en modo auto-commit.

CallableStatementprepareCall(String sql)

Crea un objeto CallableStatement para ejecutar procedimientos almacenadosSQL en la BD.

PreparedStatementprepareStatement(String sql)

Crea un objeto PreparedStatement para ejecutar consultas SQL parametrizadasen la BD.

void rollback() Deshace todos los cambios realizados desde la última vez que se ejecutó commito rollback

void close() Cierra una conexión, liberando todos los recursos asociados a la misma.

Page 9: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 9/40

Statement createStatement(inttipoResultSet, inttipoConcurrencia)

Crea también una sentencia SQL pero generará en su ejecución un objetoResultSet con unas características determinadas.

boolean isClosed () Devuelve verdadero si la conexión está cerrada

boolean isReadOnly() Devuelve true si la conexión es de sólo lectura

PreparedStatementprepareStatement(Str ing sql)

Crea un objeto PreparedStatement que va a permitir enviar y ejecutar sentenciasSQL parametrizadas a la base de datos correspondiente.

PreparedStatement

prepareStatement(Str ing sql ,

int t ipo ResultSet , int

t ipoConcurrencia)

Igual que el método anterior, pero permite especificar las características delResultSet que se obtendrá a la hora de ejecutar el objeto PreparedStatementcorrespondiente.

INTERFACE STATEMENT

Esta interfaz permite enviar instrucciones SQL a la base de datos. Podemos

obtener un objeto que implemente esta interfaz a partir del

método Statement createStatement() de la interfaz

Connec t ion .

Para ejecutar una consulta tipo SELECT se emplea el método

executeQuery (String sql). Este método devuelve un objeto tipo ResultSet .

Para ejecutar una instrucción tipo DELETE, UPDATE, INSERT o una

instrucción DDL (Data Definition Language) se emplea

executeUpdate(Str ing s ql ) .

Mediante el método execute(String sql) podemos ejecutar cualquiera de

los comandos anteriores.

Page 10: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 10/40

Un objeto Statement se usa para enviar sentencias SQL a la base de datos.

Actualmente hay tres tipos de objetos Statement, todos ellos actúan como

contenedores para la ejecución de sentencias en una conexión dada: Statement,

PreparedStatement que hereda de Statement, y CallableStatement que hereda dePreparedStatement. Estas están especializadas para enviar tipos particulares de

sentencias SQL

Los métodos más importantes de la interfazStatement son:

Método Descripciónvoid cancel() Cancela el objeto Statement, abortando la

sentencia SQL correspondiente.

void close() Cierra el objeto Statement, liberando todos losrecursos asociados de forma inmediata.

boolean execute(String sql) Ejecuta la sentencia SQL, que se pasa porparámetro

ResultSetexecuteQuery(String sql)

Ejecuta una sentencia SQL, que devuelve unconjunto de resultados, representado por elobjeto ResultSet.

int executeUpdate(Stringsql)

Ejecuta la sentencia SQL que se pasa porparámetro y debe ser del tipo INSERT,UPDATE o DELETE

Connection getConnection() Devuelve el objeto Connection a partir del quese ha creado el objeto Statement

Creando un objeto Statement

Page 11: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 11/40

Una vez que se ha establecido una conexión a una base de datos determinada,esta conexión se puede utilizar para ejecutar sentencias SQL.

Connectioncn=DriverManager.getConnection(url,”pepe”,”xxx”);

Statement st=cn.createStatement();

No olvidemos que si se trata de un comando Select que se desea ejecutar,

invocaremos al método executeQuery . Ejemplo:

Connection c n=DriverManager.getConnection(url,”pepe”,”xxx”);Statement st=cn.createStatement();rs=st.executeQuery(“Select * from clientes”);

Si se trata de los comandos insert, update, delete y otros que modifican los datosde una tabla, utilizaremos el método executeUpdate . Ejemplo:

Connection cn=DriverManager.getConnection(url,”pepe”,”xxx”);Statement st=cn.createStatement();st.executeQuery(“insert into Clientes values (“‘001’,’Garcia

Díaz’,’Carla’”);

ENVIO DE SENTENCIAS SQLJDBC suministra tres clases para el envío de sentencias SQL. Estas clases

son las siguientes:

Statement.- Creada por el método createStatement. Un objeto Statementse usa para enviar sentencias SQL simples.

PreparedStatement.- Creada por el método prepareStatement. Un objeto PreparedStatement se usa para sentencias SQL que

toman uno o más parámetros como argumentos de entrada (parámetros IN). El PreparedStatement extienden Statement y por

tanto heredan los métodos de Statement. Un objeto PreparedStatement es potencialmente más eficiente que un objeto Statement

porque este ha sido precompilado y almacenado para su uso futuro.

CallableStatement.- Creado por el método prepareCall. Los objetos

CallableStatement se usan para ejecutar procedimientos almacenados .

Page 12: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 12/40

Un objeto CallableStatement hereda métodos para el manejo de los

parámetros IN de PreparedStatement, y añade métodos para el manejo de

los parámetros OUT e INOUT.

INTERFACE RESULTSET

Esta interface representa un conjunto o esquema de datos que son el

resultado de una consulta SQL.

Es necesario usar un objeto que almacena todos los datos del resultado de

una consulta (select), este objeto se llama ResultSet.

El siguiente código presenta el objeto ResultSet: rs y le asigna el resultado

de una consulta anterior.

ResultSet rs=st.executeQuery(“Select codcli,apecli,nomcli from Clientes”);

Page 13: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 13/40

El ResultSet es una estructura similar a la tabla de datos con la diferencia

que no es física, sino de tipo virtual, se creará en la memoria del servidor y

desde allí se tomarán los datos para mostrarlos posteriormente en el cliente.

METODOS DEL RESULTSET

Nombre delMétodo

Descripción

previous() Envía el puntero a la fila anterior del objeto ResultSet. (devuelve true siencuentra la fila anterior)

next() Envía el puntero a la fila siguiente del objeto ResultSet. (devuelve true siencuentra la fila siguiente)

first() Envía el puntero a la primera fila del objeto ResultSet. (devuelve true si seencuentra primera fila)

last() Envía el puntero a la última fila del objeto ResultSet. (devuelve true si seencuentra última fila)

isFirst() Devuelve verdadero, si el puntero se encuentra en la primera fila getString() Captura un dato de tipo String del esquema de datosgetInt() Captura un dato de tipo int del esquema de datosgetDate() Captura un dato de tipo Date del esquema de datos

getBoolean() Captura un dato de tipo boolean del esquema de datosgetDouble() Captura un dato de tipo double del esquema de datos

getLong() Captura un dato de tipo long del esquema de datos

EL MÉTODO NEXT

El método next mueve al puntero o cursor a la siguiente fila y hace que esa

fila (llamada fila actual) sea con la que podamos operar. Como el cursorinicialmente se posiciona justo encima de la primera fila de un objeto

ResultSet, primero debemos llamar al método next para mover el cursor a

la primera fila y convertirla en la fila actual. Sucesivas invocaciones del

método next moverán el cursor de línea en línea hacia adelante. Existen

otros métodos con los cuales podemos mover el puntero de la tabla o

consultar sobre la posición actual del puntero (en la tabla anterior, aparece

la lista de métodos que mueven el puntero de la tabla).

Page 14: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 14/40

CONSEGUIR LOS DATOS DEL RESULTSET

Método getXXX

(XXX representa al tipo de dato, ejemplo: getDouble(), getString(),getLong(), etc)

Los métodos getXXX del tipo apropiado se utilizan para recuperar el valorde cada columna. Por ejemplo:

rs.getString(1); //Recupera el dato de la primera columna de la fila actual

rs.getString(“CODCLI”); //Recupera el dato de la campo “CODCLI” de la filaactual

Nota: La primera columna del ResultSet corresponde al número 1 Podemos referirnos a un dato del ResultSet mediante su número o

nombre de

columna.

Para conseguir otros tipos de datos contamos con los siguientes métodos:

Page 15: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 15/40

getByte

getShort

getInt

getLong

getFloat

getDouble

getBigDecimal

getBoolean

getString

getBytes

getDate

getTime

El ResultSet generado tiene la siguiente estructura:

Page 16: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 16/40

Page 17: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 17/40

Tema 2: Estableciendo una conexión de datos

Las conexiones JDBC, tal como estudiamos en la semana anterior, nos

permiten conectarnos con diferentes orígenes de datos, lo único que

tenemos que hacer es: utilizar el driver provisto por el fabricante de la base

de datos, lo cual implementa la funcionalidad del JDBC para dicho gestor de

Base de Datos. Lo único que variará en el código fuente es la forma de

conexión, mientras que todo lo demás se mantendrá igual.

Previamente, se requiere que el driver de mysql se inserte en el directorio

de librerias externas de Java, situado en la siguiente ruta:

C:\Archivos de programa\Java\jdk1.6.0\jre\lib\ext

Nota: El driver de mysql, se puede descargar de la página de mysql en

Internet: http://dev.mysql.com/downloads/connector/j/ El archivo a

Page 18: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 18/40

descargar debe ser un archivo de extensión JAR. Para nuestro caso,

este archivo se llama: mysql-connector-java-5.0.8-bin.jar (este

nombre puede cambiar de acuerdo al nombre de la versión, lo mismo

que la carpeta del JDK)

Pasos necesarios para Establecer una Conexión JDBC

1. Importar las clases del paquete java.sql

Para utilizar esta tecnología, debemos importar las clases del paquete:

java.sql de la siguiente manera:

import java.sql.*

2. Registrar el Driver a utilizar en la clase DriverManager

Pasar el nombre del paquete donde se encuentra el JDBC

//Registra el driver

Stringdriver="com.mysql.jdbc.Driver";

Class.forName(driver);

Page 19: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 19/40

3. Abrir la conexión

La forma común de establecer una conexión con una base de datos es

llamar al método getConnection() de la clase DriverManager , a este

método se le debe pasar como parámetro la URL de JDBC que identifica

a la base de datos con la que queremos realizar la conexión. La ejecución

de este método devolverá un objeto Connection que representará la

conexión con la base de datos.

La sintaxis general para realizar una conexión es la siguiente:

String servidor="localhost";

String puerto="3306";

String usuario="root";

String password="telesup";

String basedatos="Comercial";

String driver="com.mysql.jdbc.Driver";

String

cadenaconexion="jdbc:mysql://"+servidor+":"+puerto+"/"+basedatos;

cn=DriverManager.getConnection(cadenaconexion,usuario,password);

4. Definir el objeto Statement para el manejo de comandos

(se requiere que la conexión esté abierta)

Page 20: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 20/40

st=cn.createStatement();

5. Crear el esquema de datos (Objeto ResultSet)

A partir de la ejecución del comando Select.

rs=stmt.executeQuery("select * from Clientes");

6. Visualizar elcontenido del esquemade datos

while(rs.next()) // método avance al siguiente y devuelve tru

{

System.out.print(rs.getString("Codcli")+"\t");

System.out.print(rs.getString("Apecli")+"\t");

System.out.print(rs.getString("Nomcli")+"\t");

System.out.print(rs.getString("Dircli")+"\t");

System.out.println("");

}

7. Cerrar la conexión

Page 21: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 21/40

rs.close();

cn.close();

CODIGO FUENTE COMPLETO PARA REALIZAR LA CONEXIÓN CON LA BASE DE DATOSCOMERCIAL Y MOSTRAR EL CONTENIDO DE LA TABLA CLIENTES

Page 22: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 22/40

Page 23: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 23/40

Tema 3: Aplicando POO p ara la gestión deoperaciones

con una Base de datos

PROGRAMACIÓN EN CAPAS

Tal como se aprendió en el ciclo anterior, la programación en capas

nos ofrece grandes ventajas:

Separar la lógica de los diferentes niveles de nuestra aplicación El mantenimiento de software es menos engorroso y complejo Permite el trabajo en equipo por parte de los profesionales

informáticos, cada equipo se concentrará en un determinado

nivel. Cada nivel se encuentra integrado al otro. La programación en capas se amolda a las metodologías

modernas del desarrollo de sistemas.

Una aplicación puede ser desarrollada en capas, pudiendo ser

estas:

a. Lógica de Presentación: se limita a la interfaz del cliente

desde donde se realizan las entradas y salidas de datos. En

esta capa también se puede realizar la validación del ingreso

de datos.

b. Lógica de Negocios: incluye la programación de los distintos

procesos que se dan en nuestro sistema.

c. Lógica de Datos: esta capa se encarga de la gestión de

datos a través de las operaciones elementales: conectar,

desconectar, ejecutar consultas y ejecutar actualiaciones.

Page 24: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 24/40

d. Otras capas: Incluye a otros tipos de componentes, tales

como: librerías dinámicas, etc.

CASO PRÁCTICO:Realiza una aplicación visual con orientación a objetos que realice las principales

operaciones de mantenimiento de datos.

L GICA DE DATOS

Clase : GestionBD.javaPaquete : DsDescripción : Esta clase contiene los métodos que permitirán que nuestraaplicación se conecte con la base de datos y se ejecuten los comandos sql.

package Ds;import java.sql.*;public class GestionBD {

Page 25: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 25/40

public Connection cn = null;public Statement st = null;

public ResultSet rs = null;

public void conectar() throws Exception {String servidor="localhost";String puerto="3306";String usuario="root";String password="telesup";String driver="com.mysql.jdbc.Driver";

String basedatos="Comercial";String

cadenaconexion="jdbc:mysql://"+servidor+":"+puerto+"/"+basedatos;

Class.forName(driver);cn=DriverManager.getConnection(cadenaconexion,usuario,password);}

public ResultSet ejecutarConsulta(String sql) throws Exception{

st=cn.createStatement();rs=st.executeQuery(sql);

return rs;}

public void ejecutarActualizacion (String sql) throws Exception{st=cn.createStatement();st.executeUpdate(sql);

}

public void desconectar () throws Exception{cn.close();}

}

LOGICA DE PRESENTACIÓN

Clase : FrmClientes.java

Paquete : view

Page 26: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 26/40

Descripción : Esta clase representa al formulario que contiene la interfacede usuario

package View;//Importamos los paquetes con los que trabajeremos en esteformularioimport java.sql.*;import Ds.*;import Model.*;import javax.swing.JOptionPane;importjavax.swing.table.DefaultTableModel;

public class frmClientes extendsjavax.swing.JFrame {//Instanciamos la clase quecorresponde a la lógica de datosGestionBD gbd=new GestionBD();String tipo;

/** Creates new form frmClientes*/

public frmClientes() {initComponents();

}

private void

formWindowOpened (java.awt.event.WindowEvent evt) {// Este evento ocurre al abrir el formulario o ventanacargardatos();desactivar();

}

private void btninsActionPerformed (java.awt.event.ActionEvent evt){// Al hacer click en el botón insertartxtapecli.requestFocus();

tipo="INS";activar();

ClienteModel em=new ClienteModel();txtcod.setText(em.generarcodigo());

}

private void btnmodActionPerformed (java.awt.event.ActionEventevt) {// Al hacer click en el botón modificar

Page 27: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 27/40

activar();tipo="MOD";

int fila=jTable1.getSelectedRow(); //obtener nro. de fila selec . //Enviar los datos de la fila seleccionada a las cajas

txtcod.setText((String)jTable1.getValueAt(fila, 0));txtapecli.setText((String)jTable1.getValueAt(fila, 1));

txtnomcli.setText((String)jTable1.getValueAt(fila, 2));txtdircli.setText((String)jTable1.getValueAt(fila, 3));txtdiscli.setText((String)jTable1.getValueAt(fila, 4));

}

private void btnEliActionPerformed (java.awt.event.ActionEventevt) {// Al hacer click en el boton eliminartry {

int fila = jTable1.getSelectedRow(); //Obtener filaseleccionada

String cod = (String) jTable1.getValueAt(fila, 0);int r = JOptionPane.showConfirmDialog(null, "¿Esta Ud.

seguro que desea eliminar?", "Aviso", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if (r == 0) { //Si contesto SI

String cad = "Delete from clientes where codcli='"+ cod + "'";gbd.conectar();

gbd.ejecutarActualizacion(cad);cargardatos();

}} catch (Exception e) {

JOptionPane.showMessageDialog(null, e.getMessage());}

}

private void btnGrabarActionPerformed(java.awt.event.ActionEventevt) {try {// Al hacer click en el botón grabarString cod=txtcod.getText();

String ape=txtapecli.getText();String nom=txtnomcli.getText();String dir=txtdircli.getText();String dis=txtdiscli.getText();

String sql="";if(tipo.equals("INS")){

sql="insert intoClientes(codcli,apecli,nomcli,dircli,discli)values('"+cod+"','"+ape+"','"+nom+"','"+dir+"')";

} else{sql="update Clientes set

apecli='"+ape+"',nomcli='"+nom+"',dircli='"+dir+"',discli='"+dis+"'where codcli='"+cod+"'";}

Page 28: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 28/40

gbd.ejecutarActualizacion(sql);cargardatos(); //Actualizar el Jtable

limpiar();desactivar();} catch (Exception e) {

JOptionPane.showMessageDialog(null,"Error: "+e.getMessage());}

}

private void txtcadenaKeyReleased(java.awt.event.KeyEvent evt){// Ocurre cada vez que se presiona un character en la caja busquedaString cad;

cad="Select * from clientes where apecli like'"+txtcadena.getText()+"%'";

try {//Crea el esquema de datos que se visualizará (resultado de la

busqueda)gbd.conectar();

ResultSet rs=gbd.ejecutarConsulta(cad);

DefaultTableModel dtm=new DefaultTableModel();dtm.addColumn("Codigo");

dtm.addColumn("Apellido ");dtm.addColumn("Nombres");dtm.addColumn("Direccion");dtm.addColumn("Distrito");

while(rs.next()){ //Recorre el esquema de datos fila afila Object[] fila=new Object[5];

fila[0]=rs.getObject(1);

fila[1]=rs.getObject(2);fila[2]=rs.getObject(3);fila[3]=rs.getObject(4);fila[4]=rs.getObject(5);dtm.addRow(fila);

} //Fin del While

jTable1.setModel(dtm); //Enviar el dtm al JTable } catch (Exception e) {

JOptionPane.showMessageDialog(null,"Error:"+e.getMessage());

}}

Page 29: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 29/40

private voidbtnCancelarActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:limpiar();

desactivar();}

//Muestra el esquema de datos incial en el JTableprivate void cargardatos (){

try {gbd.conectar();ResultSet rs=gbd.ejecutarConsulta("Select * from

clientes");

DefaultTableModel dtm=new DefaultTableModel();dtm.addColumn("Codigo");

dtm.addColumn("Apellido ");dtm.addColumn("Nombres"); dtm.addColumn("Direccion");dtm.addColumn("Distrito");

while(rs.next()){ //Recorre el esquema de datos fila afilaObject[] fila=new Object[5];

fila[0]=rs.getObject(1);

fila[1]=rs.getObject(2);

fila[2]=rs.getObject(3);

fila[3]=rs.getObject(4);

fila[4]=rs.getObject(5);

dtm.addRow(fila);} //Fin del While

jTable1.setModel(dtm); //Enviar el dtm al JTable} catch (Exception e) {

JOptionPane.showMessageDialog(null,"Error:"+e.getMessage());}

}

private void limpiar(){//Limpia las cajas de textotxtcod.setText("");

Page 30: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 30/40

txtapecli.setText("");txtnomcli.setText("");

txtdircli.setText("");txtdiscli.setText("");

}

private voiddesactivar(){//Desactivaalgunas cajasde texto

txtcod.setEnabled(false);txtapecli.setEnabled(false);

txtnomcli.setEnabled(false);txtdircli.setEnabled(false);

txtdiscli.setEnabled(false);}

private void activar (){ //Desactiva algunas cajas de textotxtcod.setEnabled(true);txtapecli.setEnabled(true);

txtnomcli.setEnabled(true);txtdircli.setEnabled(true);txtdiscli.setEnabled(true);

btnGrabar.setEnabled(true);btnCancelar.setEnabled(true);

LOGICA DE NEGOCIOS

Clase : ClienteModelPaquete : ModelDescripción : Esta clase representa la lógica de negocios (procesos)

Page 31: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 31/40

package Model;import Ds.GestionBD;import java.sql.*;import javax.swing.JOptionPane;

public class ClienteModel {GestionBD gbd=new GestionBD();

public String generarcodigo(){String nuevocodstr="";

try {String cad;cad = "Select chr_emplcodigo from empleado order by

chr_emplcodigo desc limit 0,1";gbd.conectar();

ResultSet rs = gbd.ejecutarConsulta(cad);rs.next(); //Ubico mi puntero en la primera filaString codigo = rs.getString(1);

int nuevocod=Integer.parseInt(codigo)+1;nuevocodstr=String.valueOf(nuevocod);

} catch (Exception e) {JOptionPane.showMessageDialog(null, e.toString());

}return this.rellenar(nuevocodstr, 4);

}

public String rellenar(String cad,int longitud){int lc=cad.length();int lrellenar=longitud-lc;String relleno="";for(int i=0;i<=lrellenar-1;i++){

relleno+="0";}return relleno+cad; //La cadena rellenada

}}

Page 32: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 32/40

Page 33: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 33/40

Tema 04: La interface Prepared Statement

Algunas veces es más conveniente o eficiente utilizar objetos

PreparedStatement para enviar sentencias SQL a la base de datos.

Cuándo utilizar un objeto PreparedStatement

Si queremos ejecutar muchas veces un objeto Statement, reduciremos el

tiempo de ejecución si utilizamos un objeto PreparedStatement, en su lugar.

La característica principal de un objeto PreparedStatementes que, al

contrario de un objeto Statement, se le entrega una sentencia SQL cuando

se crea. La ventaja de esto es que en la mayoría de los casos, esta sentencia

SQL se enviará al controlador de la base de datos inmediatamente, donde

será compilado. Como resultado, el objeto PreparedStatementno sólo

contiene una sentencia SQL, sino una sentencia SQL que ha sido

precompilada. Esto significa que cuando se ejecuta la PreparedStatement,

el controlador de base de datos puede ejecutarla sin tener que compilarlanuevamente.

La ventaja de PreparedStatement es que utilizan parámetros que podemos

utilizar en la misma sentencia y suministrar distintos valores cada vez que la

ejecutemos.

Crear un objeto PreparedStatement

PreparedStatement ps=cn.prepareStatement("UPDATE PRODUCTOS SET STOCKPRO = ? WHERENOMPRO LIKE ?");

Page 34: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 34/40

La variable ps contiene la sentencia SQL,

"UPDATE PRODUCTOS SET

STOCKPRO = ? WHERE NOMPRO

LIKE?" , que también ha sido, en lamayoría de los casos, enviada al

controlador de la base de datos, y

precompilado.

Suministrar Valores para los Parámetros de un PreparedStatement

Necesitamos suministrar los valores que se utilizarán en los lugares donde

están las marcas de interrogación, antes de ejecutar un objeto

PreparedStatement . Podemos hacer esto llamando a uno de los métodos

setXXX definidos en la clase PreparedStatement . Si el valor que queremos

sustituir por una marca de interrogación es un int de Java, podemos llamar

al método setInt . Si el valor que queremos sustituir es un String de Java,

podemos llamar al método setString , etc. En general, hay un métodosetXXX para cada tipo Java. Utilizando el objeto ps del ejemplo anterior, la

siguiente línea de código selecciona la primera marca de interrogación para

un int de Java, con un valor de 75.

ps.setInt(1, 75);

Page 35: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 35/40

Como podríamos asumir a partir de este ejemplo, el primer argumento de

un método setXXX indica la marca de interrogación que queremos

seleccionar, y el segundo argumento el valor que queremos ponerle. El

siguiente ejemplo selecciona la segunda marca de interrogación con el string"Arroz ".

ps.setString(2, "Arroz");

Después de que estos valores hayan sido asignados para sus dos

parámetros, la sentencia SQL de ps será equivalente a la sentencia SQL

que hay en el string cad del siguiente ejemplo. Por lo tanto, los dosfragmentos siguientes de código hacen lo mismo.

Código 1

String cad="UPDATE PRODUCTOS SET STOCKPRO=75 WHERE NOMPRO LIKE 'Arroz'";stmt.executeUpdate(cad);

Código 2

PreparedStatement ps=cn.prepareStatement("UPDATE PRODUCTOS SET STOCKPRO=? WHERE NOMPRO LIKE ?");ps.setInt(1, 75);ps.setString(2, "Arroz");ps.executeUpdate().

Mirando estos ejemplos podríamos preguntarnos por qué utilizar un objeto

PreparedStatement con parámetros en vez de una simple sentencia, yaque la sentencia simple implica menos pasos. Si actualizáramos la columna

STOCKPRO sólo una o dos veces, no sería necesario utilizar una sentencia

SQL con parámetros. Si por otro lado, tuviéramos que actualizarla

frecuentemente, podría ser más fácil utilizar un objeto PreparedStatement ,

especialmente en situaciones cuando la utilizamos con un bucle while para

seleccionar un parámetro a una sucesión de valores. Veremos este ejemplo

más adelante en esta sección.

Page 36: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 36/40

Una vez que a un parámetro se ha asignado un valor, el valor permanece

hasta que lo resetee otro valor o se llame al método clearParameters .

Utilizando el objeto PreparedStatement : ps , el siguiente fragmento de

código reutiliza una sentencia prepared después de resetar el valor de uno

de sus parámetros, dejando el otro igual.

Utilizar una Bucle para asignar Valores

Normalmente se codifica más sencillo utilizando un bucle for o while para

asignar valores de los parámetros de entrada. El siguiente fragmento de

código demuestra la utilización de un bucle for para asignar los parámetros

en un objeto PreparedStatement : ps . El array stocks contiene las

cantidades del stock de los productos. Estas cantidades corresponden con

los nombres de los productos listados en el array productos , por eso la

primera cantidad de stocks (175) se aplica al primer nombre de productos

("arroz "), la segunda cantidad de stocks (150) se aplica al segundo nombre

de productos (" azúcar "), etc. Este fragmento de código demuestra la

actualización de la columna STOCKPRO para todos los nombres de

productos de la tabla PRODUCTOS.

PreparedStatement ps;

Page 37: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 37/40

String cad="update PRODUCTOS set STOCPRO=? whereNOMPRO like ?";ps=con.prepareStatement(cad);int[] stocks={175, 150, 60, 155, 90};String[]

productos={"arroz","azúcar","aceite","mantequilla","leche"};int len=stocks.length;for(int i=0;i<len;i++){ ps.setInt(1, stocks[i]);

ps.setString(2, productos[i]);ps.executeUpdate();}

Cuando el propietario quiere actualizar los nuevos stocks de la semana

siguiente, puede utilizar el mismo código como una plantilla. Todo lo que

tiene que hacer es introducir las nuevas cantidades en el orden apropiado

en el array stocks . Los nombres de los productos permanecen constantes,

por eso no necesitan cambiarse. (en una aplicación real, los valores

probablemente serán introducidos por el usuario en vez de hacerlos a travésde un array).

Creación de aplicaciones swing que realicen consultas en JTables.

Realizar una aplicación que permita seleccionar desde una lista desplegablela categoría de un producto y luego mostrar la lista de productos

pertenecientes a dicha categoría. Los elementos de la lista desplegable

deben ser tomados desde la tabla categorías.

Page 38: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 38/40

LÓGICA DE PRESENTACIÓN

Clase : FrmProductosCategoriasPaquete : ViewDescripción : Esta aplicación filtra los datos de los productos de acuerdo con lacategoría

package View;

import Ds.GestionBD;import java.sql.*;import javax.swing.JOptionPane;import javax.swing.table.DefaultTableModel;public class frmConsultaProductos extends javax.swing.JFrame {GestionBD gbd=new GestionBD();

private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {

Page 39: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 39/40

// TODO add your handling code here:try {

gbd.conectar();String codcat="";codcat=((String)jComboBox1.getSelectedItem()).substring(0, 2);

String sql="Select * from productos where codcat="+codcat;

ResultSet rs=gbd.ejecutarConsulta(sql);

DefaultTableModel dtm=new DefaultTableModel();dtm.addColumn("Codproducto");

dtm.addColumn("Producto");dtm.addColumn("Descripcion");dtm.addColumn("Marca");dtm.addColumn("Precio");dtm.addColumn("Stock");

while(rs.next()){ //Recorre el esquema de datos fila a filaObject[] fila=new Object[6];

fila[0]=rs.getObject(1);fila[1]=rs.getObject(2);fila[2]=rs.getObject(3);fila[3]=rs.getObject(4);fila[4]=rs.getObject(5);fila[5]=rs.getObject(6);

dtm.addRow(fila);} //Fin del While

jTable1.setModel(dtm); //Enviar el dtm al JTable} catch (Exception e) {

JOptionPane.showMessageDialog(null,"Error: "+e.getMessage());}

}}

Nota: Se requiere en el paquete Ds, la clase GestionBD

Page 40: IV Unidad Lenguaje de Programacion II

7/21/2019 IV Unidad Lenguaje de Programacion II

http://slidepdf.com/reader/full/iv-unidad-lenguaje-de-programacion-ii 40/40