Desarrollo de Software con Antonio J. Vélez Q. Universidad del Valle Sede Palmira
Requerimientos de Software Java 2 SE Development Kit java.sun.com/javase Java EE 5 SDK java.sun.com/javaee Netbeans (IDE) www.netbeans.org Netbeans Enterprise Pack www.netbeans.org Motor de bases de datos www.postgresql.org Driver JDBC www.postgresql.org
Conceptos Básicos Funcionamiento de los servidores web Conexión a Bases de Datos Páginas estáticas (dhtml : html + javascript) Páginas dinámicas JDBC Patrón DAO Diseño de Aplicaciones Layers vs Tiers Patrones de Diseño
Funcionamiento de los Servidores Web (páginas estáticas) Solicitud http://java.sun.com:8080/javase/index.html Servidor Hardware java.sun.com 8080 Servidor Web (Apache / SJWS) index.html (html + javascript) Archivo.../javase/index.html
Funcionamiento de los Servidores Web (páginas dinámicas) Solicitud http://java.sun.com:8080/javase/index.jsp Servidor Hardware java.sun.com 8080 Servidor Web (Apache / SJWS) HTML (html + javascript) Página Dinámica Archivo.../javase/index.jsp
Layers vs Tiers Tiers esta relacionado con ubicación física en donde de ejecutan los procesos. Layers se relaciona con la organización lógica del código (paquetes). http://codebetter.com/blogs/david.hayden/archive/2005/07/23/129745.aspx Layers es la forma de organizar el código lógicamente, no físicamente. Tiers significa la separación del código en redes o procesos. http://geekswithblogs.net/mahesh/archive/2006/10/28/95322.aspx
Tiers vs Layers Client Tier Web Tier Business Tier payroll util EIS Tier (database / filesystem) Business Tier (logic business) personal entity
Patrones de Diseño General El patrón es una forma, plantilla, modelo o conjunto de reglas, que son usadas para tomar decisiones o crear cosas (o parte de éstas). http://en.wikipedia.org/wiki/pattern Computación Describe una solución verificada/probado a problema recurrente de diseño, haciendo énfasis particular sobre el contexto y la problemática que lo rodea; así como en las consecuencias e impacto de la solución. http://java.sun.com/blueprints/patterns/
Patrones de Diseño Computación (Ingeniería de Software) http://en.wikipedia.org/wiki/design_pattern_(computer_science) Un patrón de diseño es una solución general repetible para un problema común que se repite cuando se hace el diseño del software. Un patrón de diseño no es un diseño definitivo que se pueda convertir en código; es una descripción o plantilla que puede ser usada de diversas formas. En diseño orientado a objetos, el patrón muestra las relaciones e interacción entre clases y/o objetos, sin llegar a especificar el conjunto final de clases y/o objetos involucrados.
Patrones de Diseño Relaciones entre objetos Diagrama de Clases (UML) Interacción entre objetos Diagrama de Secuencia (UML)
Bases de Datos General Conjunto de datos que pertenecen al mismo contexto almacenados sistemáticamente para su posterior uso. Una biblioteca puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos en papel e indexados para su consulta. Colección de información organizada de forma tal que pueda ser procesada rápidamente por una aplicación de software. http://www.webopedia.com/term/d/database.html
Bases de Datos Computación - http://en.wikipedia.org/wiki/database Colección estructurada de registros o datos que se almacenan en un computador, de forma tal que una aplicación los pueda consultar a través de consultas (queries) El programa usado para administrar los datos y las consultas en la base de datos es conocido como Sistema Administrador de Bases de Datos (DBMS Database Management System)
JDBC - Java Database Connectivity API Java para acceder a cualquier tipo de base de datos tabular, especialmente a datos almacenados en bases de datos relacionales. JDBC permite implementar aplicaciones que realizan las siguientes actividades : Conectarse a una fuente de datos (base de datos) Envío de consultas y sentencias de actualización a una base de datos Recuperar y procesar los resultados recibidos de la base de datos como resultado de las consultas.
JDBC Clases Principales java.sql.drivermanager Permite cargar un controlador JDBC para un DBMS java.sql.connection Representa conexión con la fuente de datos java.sql.statement / java.sql.preparedstatement Representa consulta o sentencia de actualización que se envia al DBMS java.sql.resultset Conjunto de datos resultado de una consulta
Ejemplo JDBC Esquema Básico Class.forName ( "org.postgresql.driver" ) ; String strconn = "jdbc:postgresql://192.168.2.51/personal"; Connection connection = DriverManager.getConnection ( strconn, login, passwd ) ; Statement stmt = connection.createstatement(); ResultSet rs = stmt.executequery ("select identification, name from person"); while ( rs.next() ) { } int ident = rs.getint ( "identification" ) ; String name = rs.getstring ( "name" ) ;
JDBC Establecer Conexión Cargar el controlador (driver) JDBC Se requiere del nombre de la clase que representa el driver (incluido el paquete). Es distinto para cada proveedor del DBMS. ODBC jdbc.odbc.jdbcodbcdriver PostgreSQL org.postgresql.driver Derby org.apache.derby.jdbc.embeddeddriver Se usa la clase Class y el método de instancia forname. Class.forName ( "org.postgresql.driver" ) ;
JDBC Establecer Conexión Crear la conexión con la base de datos Se requiere del URL de conexión (strconnection), el cual varia dependiendo del proveedor del DBMS. ODBC jdbc:odbc:<db> PostgreSQL jdbc:postgresql://<host>:<port>/<db> Derby jdbc:derby:<db> Se usa la clase DriverManager y el método de instancia getconnection Connection conn = DriverManager.getConnection ( strconnection, login, passwd ) ;
JDBC Consultas y Sentencias SQL SQL : Standart Query Language Lenguaje para manipulación de datos sobre bases de datos Para transferir consultas al DBMS de usuan las clases java.sql.statement y java.sql.preparedstatement Se requiere crear la consulta Statement stmt = conn.createstatement ( ) ; PreparedStatement pstmt = conn.preparestatement ( sql ) ;
JDBC Consultas y Sentencias SQL Statement Se recomienda cuando la sentencia no requiere parámetros o parámetros que no requieren formato especial select identification, name from person select * from person where id = + identification PreparedStatement Se recomienda cuando la sentencia requiere parámetros insert into person (identification, name, birthdate) values (?,?,? )
JDBC Consultas y Sentencias SQL Utilización de PreparedStatement PreparedStatement pstmt = conn.preparestatement ( insert into person (identification, name, birthdate) values (?,?,? ) ) ; Asignación de valores Se usan métodos como setint, setstring, setdate, etc. pstmt.setint ( 1, identification ) ; pstmt.setstring ( 2, name ) ; pstmt.setdate ( birthdate ) ;
JDBC Ejecución de Consultas y Sentencias Existen varios métodos dependiendo de la clase. Su uso depende de la necesidad del programador. Statement : Reciben un parámetro que es la instrucción Sql a ejecutar execute : ejecuta una sentencia, devuelve un valor de verdad executequery : ejecuta una consulta y devueve un ResultSet executeupdate PreparedStatement Los mismos de Statement, pero no reciben parámetros
JDBC Ejecución de Consultas y Sentencias Statement stmt.execute ( insert into product (code, name, cost, tax) values (105, 'Arroz', 700, 0.08) ) ; stmt.executequery ( select * from product ) ; stmt.executeupdate ( update product set cost = 800 where code = 105 ) ; PreparedStatement Se usan los métodos execute, executequery y executeupdate, pero se diferencias de los métodos de la clase Statement, porque NO reciben parámetros.
JDBC Recuperando Resultados (ResultSet) El resultado generado por los métodos executequery son objetos de tipo ResultSet Un ResultSet se puede comparar con una hoja de calculo. Los métodos más usados son : next : devuelve verdadero si hay más registros en el ResultSet getint, getstring, getdate, etc : para obtener uno de los campos del registro.
JDBC Recuperando Resultados (ResultSet) while ( rs.next() ) { int ident = rs.getint ( "identification" ) ; String name = rs.getstring ( "name" ) ;... }
Conexión a BD Patrón DAO DAO : Data Access Object Contexto Patrón de diseño para acceso a bases de datos Independizar el acceso a los datos de la lógica de la aplicación. Centraliza el acceso a los datos en clases responsables de ellos Permite la modificación del mecanismo de acceso a los datos, sin necesidad de modificar la lógica de la aplicación
Patrón DAO Clases básicas BusinessObject Objetos que implementan la lógica de la organización DataAccessObject Objetos que accesan los datos TransferObject Encapsula los datos como objetos
Patrón DAO Interacción entre objetos El BusinessObject Crea o contiene la referencia a un objeto DAO Solicita datos al DAO (getdata) El DAO establece conexión con la BD y realiza la consulta
Patrón DAO Interacción entre objetos El BusinessObject Crea o contiene la referencia a un objeto DAO Solicita datos al DAO (getdata) El DAO establece conexión con la BD y realiza la consulta
Patrón DAO Interacción entre objetos El BusinessObject Modifica la información del objeto TransferObject Solicita actualización al DAO (modificar la BD) El DAO Actualiza la BD
Patrón DAO Interacción entre objetos El BusinessObject Modifica la información del objeto TransferObject Solicita actualización al DAO (modificar la BD) El DAO Actualiza la BD