CC5002 -‐ Desarrollo de Aplicaciones Web - U-Cursos
-
Upload
khangminh22 -
Category
Documents
-
view
0 -
download
0
Transcript of CC5002 -‐ Desarrollo de Aplicaciones Web - U-Cursos
Plan de clases proyectado (1era Mitad)
1. Intro 2. HTTP y HTML 3. Servlets y Tomcat 4. JSP y Threads 5. Sesiones y Cookies 6. -‐>Bases de datos 7. JavaBeans 8. JSP
9. MVC 10. JSTL 11. Seguridad 12. CSS 13. Javascript 14. AJAX 15. Control
Nicolás Silva, Universidad de Chile 2
Pregunta para Uds.
• Como almacenarían su base de datos en el disco? – Usando un archivo?
• Leen y escriben el archivo completo? • En que formato? • Serialización en Java? • Archivos CSV?
– Usando una base de datos relacional?
Nicolás Silva, Universidad de Chile 5
Tareas de una Base de Datos
• Crear el archivo • Determinar su estructura • Leer/Escribir el archivo completo? • Agregarlo en el final? • Encontrar un registro en parZcular • Solamente cambiar un registro en parZcular • Cambiar múlZples registros • Cambiar múlZples registros sin interferir con otros Threads que están haciendo lo mismo!
Nicolás Silva, Universidad de Chile 6
Otras tareas
• Respaldo
• Seguridad
• Detección/Reparación de datos corruptos
• Desempeño
Nicolás Silva, Universidad de Chile 7
Desde los viejos Zempos…
• El sistema operaZvo provee una estructura de archivos organizada por – Por Secuencia – RelaZvos – En B-‐Trees – Índice Secundario
Nicolás Silva, Universidad de Chile 8
Archivos por Secuencia • Archivos donde solo se puede agregar info – Los registros varían en tamaño – La cabecera indica el tamaño – Se borran registros con un pequeño flag
– Se encuentran registros por • Offset (O(1)) • Búsqueda secuencial (O(n))
– Se recupera el espacio reescribiendo el archivo.
Nicolás Silva, Universidad de Chile 9
Brieva
Longton
Bachelet
López
Tapia
Archivos por posición relaZva • Es un arreglo de registros – Los registros Zenen un tamaño fijo – Se borran registros
• Con un flag
• Se encuentran registros por – Numero de Registro (O(1)) – Búsqueda secuencial (O(N))
Nicolás Silva, Universidad de Chile 10
Brieva
Longton
Bachelet
López
Tapia
Archivos en B-‐Trees • Árbol N-‐ario
– Las paginas de índices son fijas en tamaño
– Registros pueden variar en tamaño
– Paginas de índice parcialmente llenas • Se dividen cuando se llenan
– Paginas de índice se cachean
• Se borran los registros – Se remueve el registro y se actualiza el índice
• Se buscan registros por – Key (O(log(n))) – Búsqueda secuencial (O(N))
Nicolás Silva, Universidad de Chile 11
Índices Secundarios • Cuando quieres acceder registros por múlZples keys
• Son B-‐Trees indexados por diferentes key
Nicolás Silva, Universidad de Chile 12
Después llego el Monitor de Transacciones
• Control de concurrencia • Respaldos • Recuperación contra Fallos • Seguridad
Nicolás Silva, Universidad de Chile 13
Hoy Tenemos Bases de Datos Relacionales
• Internamente tenemos: – Estructura de archivos
• Por Secuencia • RelaZvos • B-‐Trees • Índices Secundarios
• Tipos de Datos – Caracteres – Enteros – Flotantes – Fechas – BLOBs
Nicolás Silva, Universidad de Chile 14
BD Relacionales nos Proveen
• Control de Concurrencia • Recuperación contra Fallos • Respaldos • Soporte para mulZ-‐procesadores
Nicolás Silva, Universidad de Chile 15
Solo Escribir SQL
• SQL – Structured Query Language – SQL es “Estándar”
Nicolás Silva, Universidad de Chile 16
Base de Datos Típica
• Una base de datos relacional es organizada en varias tablas
• Tabla: telefonos
Nicolás Silva, Universidad de Chile 17
apellido nombre telefono
Piñera SebasZan 2248954
Brieva Francisco 2439725
Ejemplo Base de Datos Relacional
• MySQL Community Server – GraZs desde www.mysql.com
• Disponible para Windows, Linux y Mac OS X • Yo estoy usando la versión 5.1.44
– Buena documentación existente • Instrucciones de instalación/configuración • Tutoriales • Manuales de referencia
Nicolás Silva, Universidad de Chile 18
MySQL
• Instalación estándar corre como un servicio de Windows
• Por default no esta habilitado el acceso remoto
• Correr el cliente: mysql –u root -‐p • (Luego lo accederemos desde Java usando JDBC
Nicolás Silva, Universidad de Chile 19
Ejemplo • create database clase6;
• use clase6; • create table telefonos (apellido varchar(20),
nombre varchar(20), telefono varchar(20));
• insert into telefonos values (‘Piñera’,’Sebastian’,null);
• select * from telefonos;
• update telefonos set telefono = ‘2245533’ where apellido = ‘Piñera’;
• delete from telefonos where apellido=‘Piñera’;
• drop table telefonos;
Nicolás Silva, Universidad de Chile 20
Podemos hacer mas con SQL
• … order by • Muchos Zpos de datos: integer – Concepto de null
• Joins – Unimos el resultado de 2 tablas
• Hay muchos cursos dedicados únicamente a bases de datos
Nicolás Silva, Universidad de Chile 21
Normalmente un “Id de Registro” es usado
• IdenZfica únicamente una fila • MySQL soporta esto con “auto_increment” • Se usa un B-‐Tree para indexar y encontrar rápidamente la fila
Nicolás Silva, Universidad de Chile 22
id apellido nombre telefono
1 Piñera SebasZan 2248954
2 Brieva Francisco 2439725
Ejemplo de auto_increment • create table telefonos (id not null
auto_increment, apellido varchar(20), nombre varchar(20), telefono varchar(20), primary key(id));
• insert into telefonos values (‘Bachelet’,’Michelle’,null);
• select * from telefonos where id=1;
• update telefonos set telefono = ‘2245533’ where id=1;
• delete from telefono where id=1;
Nicolás Silva, Universidad de Chile 23
Pueden chequear la base de datos “mysql”
• Esta conZene tablas con datos de sistema de MySQL.
Nicolás Silva, Universidad de Chile 24
A donde nos dirigimos
Nicolás Silva, Universidad de Chile 25
Browser
Datos
HTTP Request
HTML
JVM Motor de Servlets
Archivos .class
Driver JDBC
Servidor Tomcat
Servlet
DAO
BD Relacional
Pregunta para Uds.
• Cuantos han chequeado componentes de sus aplicaciones web como programas Java por separado? (Fuera de Tomcat)
Nicolás Silva, Universidad de Chile 26
Por Donde Empezamos?
Nicolás Silva, Universidad de Chile 27
Datos
JVM
Archivos .class
Driver JDBC
Test.class
BD Relacional
Acceso a BD desde Java • Bajar el Driver JDBC para MySQL • Import java.sql • Cargar el driver JDBC para MySQL • Conectarse a la base de datos (Usando java.sql.connecZon) • Crear las sentencias SQL (Usando Statement o
PreparedStatement) • Ejecutar las sentencias
– Updates para crear tablas o agregar filas – Queries para seleccionar
• Obtener los resultados (Usando java.sql.ResultSet) • Mas sobre SQL
– Especificar columnas en las sentencias Insert – Campos de auto_increment – Transacciones – Pool de conexiones Nicolás Silva, Universidad de Chile 28
Bajar el Driver JDBC
• Es un archivo JAR • Bajarlo de www.mysql.com – Se llama Connector/J
• Se baja desde hzp://www.mysql.com/products/connector/j/ – Versión actual es 5.1
– Extraer del archivo zip – Agregarlo a la aplicación
• Para una webapp en Tomcat, ponerlo en la carpeta lib dentro de WEB-‐INF • Para una aplicación Java, en netbeans hacer click derecho a libraries, y poner add library.
Nicolás Silva, Universidad de Chile 29
Acceder al paquete java.sql
• Tendrán que colocar “import java.sql.*;” • Documentación en Java API Docs – hzp://java.sun.com/j2se/1.5.0/docs/api/
Nicolás Silva, Universidad de Chile 30
Cargar el Driver JDBC en Java • Java puede buscar el driver en la primera conexión – Buscando en archivos de propiedades por el driver jdbc
• Muchos prefieren precargar el driver. Esta es la receta mas común: – Se precarga el driver usando Class.forName() – Esto hace que Java busque y cargue el Driver – Receta }pica:
try { Class.forName("com.mysql.jdbc.Driver");
}catch (ClassNotFoundException e) { throw new AssertionError(e); }
Nicolás Silva, Universidad de Chile 31
Conectarse a la Base de Datos
• Usar DriverManager.getConnec6on() para abrir la conexión a la base de datos.
• Pasarle la información de conexión – La URL de la base de datos
• En MySQL seria: “jdbc:mysql:///<nombrebd>”
– Opcionalmente, userid, y password
Nicolás Silva, Universidad de Chile 32
El Driver Implementa la Interfaz java.sql
• java.sql.ConnecZon – Permite enviarle sentencias al servidor y otros requests (Ej: Transacciones)
• java.sql.Statement – Permite enviar queries para ejecutar
• Usar executeQuery para leer de la base de datos – Uso de SELECT, SHOW, DESCRIBE, etc.
• Usar executeUpdate para escribir en la base de datos – Uso de INSERT, DELETE, UPDATE, CREATE, DROP – Retorna el numero de filas modificadas
Nicolás Silva, Universidad de Chile 33
Pregunta para Uds.
• Conectarse a mysql con usuario root y password root desde localhost. – Fue esto una buena idea?
Nicolás Silva, Universidad de Chile 34
Acceso desde localhost a la base de datos
• Poner passwords en archivos de texto plano no es seguro – Al tener acceso local a un equipo, puedes leer estos archivos
– Muchos programas necesitaran estos passwords para conectarse
• Mejor es permiZr el acceso a la base de datos (localmente) con un password obvio.
• Verificar que no se este dando acceso remoto – Ver tabla users en base de datos mysql Nicolás Silva, Universidad de Chile 35
Usar ResultSet para recuperar las Filas
• next() te mueve a la siguiente fila (Retorna false si no hay mas filas)
• Los métodos get permiten acceder a los campos dentro de la fila – Ej: getString(“ciudad”) – Ej: getInt(“zonahoraria”)
Nicolás Silva, Universidad de Chile 36
Caracteres no PermiZdos
• Que pasa con cosas no permiZdas que quieran meter en mi bases de datos? – Comillas son un problema – HTML
Nicolás Silva, Universidad de Chile 37
Usar Prepared Statements
• Mejor desempeño al precompilar los queries – Aunque no se si esto pasa en MySQL
• Escapa los datos al preparar el query, por lo que los caracteres no permiZdos no son un problema
Nicolás Silva, Universidad de Chile 38
JDBC Soporta Transacciones
• Transacciones son un método para agrupar múlZples sentencias SQL – Por lo que su efecto es el de que se ejecuten sin interferencia de otros Threads.
• Es un atributo de la conexión – Setear autocommit a false – Ejecutar las sentencias – Hacer commit – Cerrar la conexión, o setear autocommit a true
• Mas adelante veremos las transacciones con mas detalle Nicolás Silva, Universidad de Chile 39
Transacciones y auto_increment
• La asignación de ID es un problema de sincronización
• Si se trata de crear dos registros simultáneamente puede haber un problema
• Pueden usar transacciones en la base de datos para solucionarlo
• O pueden setear el Zpo de dato como auto_increment – Ej: Típicamente se crea el id como Zpo de dato integer not null auto_increment. Al crear un registro, este campo lo llenamos como null, y la base de datos lo completa como auto incremental.
Nicolás Silva, Universidad de Chile 40
Control de Concurrencia
• Cada sentencia corre como si estuviera sola – Sin interferencia de otras sentencias concurrentes – La base de datos maneja la sincronización de sentencias individuales
– Usar transacciones para agrupar sentencias como si estuvieran corriendo solas.
Nicolás Silva, Universidad de Chile 41
Usar una Base de Datos en una Aplicación Web
Nicolás Silva, Universidad de Chile 42
Browser
Datos
HTTP Request
HTML
JVM Motor de Servlets
Archivos .class
Driver JDBC
Servidor Tomcat
Servlet
DAO
BD Relacional