Argumento de Bases de Datos con Java
Java es un potente y versátil lenguaje de programación que puede trabajar en todo tipo de entornos, desde servidores de aplicaciones middle-tier hasta clientes Web. Independientemente del tipo de aplicación que usted desarrolle y del tipo de máquina en la que se ejecute el código, su aplicación seguramente tendrá que acceder a datos almacenados en algún tipo de base de datos. Las bases de datos relacionales son la elección obvia en la mayor parte de las empresas, y han evolucionado espectacularmente en los últimos años hasta convertirse en potentes sistemas de gestión de bases de datos. Este libro pretende mostrar cómo funcionan las bases de datos relacionales, y cómo emplear la interfaz JDBC para utilizarlas en sus programas Java. Se recogen desde los fundamentos básicos de SQL y dichas bases, hasta el desarrollo de sofisticadas aplicaciones de bases de datos en Java con soporte para otras tecnologías como XML y XSLT, con las que podrá programar en entornos corporativos con calidad profesional. Bases de datos con Java es ideal para el programador que tiene unos ciertos conocimientos de Java que quiera aplicar y mejorar sus capacidades para construir aplicaciones de bases de datos en Java, o la interfaz de programación JDBC. En el caso de conocer poco Java, las explicaciones del texto le permitirán comprender los conceptos que se tratan, especialmente si procede de otro lenguaje como C o C++.0Introducción ¿A quién va dirigido este libro? ¿De qué trata este libro? Sección I: Java, SQL y Bases de datos Sección II: Exploración de JDBC Parte III: Paso de objetos a relaciones Sección IV: Bases de datos y Java en la empresa Sección V: Apéndices Qué necesita para utilizar este libro Convenciones empleadas Cómo funciona Obtener el código fuente Díganos lo que piensa Erratas Configuración del entorno Java Instalación del JDK Definir la variable JAVA_HOME Definir la variable PATH Definir la variable CLASSPATH Estructura de los directorios para los ejemplos 1. Bases de datos relacionales y Java Datos persistentes Persistencia en Java Ficheros planos Serialización de objetos Bases de datos relacionales Asociaciones relacionales Structured Query Language Cómo interactúa Java con bases de datos JDBC SQLJ EJB JDO Características de un RDBMS Transacciones Acceso concurrente Lenguajes propietarios Elección del RDBMS para este libro Cloudscape Instalación de Cloudscape Otros aspectos útiles de Cloudscape Instalación de la base de datos de ejemplo Oracle Microsoft SQL Server IBM Bases de datos de código libre Bases de datos personales Resumen 2. JDBC: Técnicas básicas Terminología y conceptos SQL y JDBC Relacionar JDBC con ODBC El paquete JDBC Versiones de JDBC JDBC 1.x JDBC 2.0 El núcleo del API JDBC 2.0 El paquete opcional del API JDBC 2.0 JDBC 3.0 Cómo funciona JDBC Preparación Cargar el driver Establecer una conexión URLs y JDBC Conexión con otras bases de datos Statements y ResultSets Acceder a datos en un ResultSet Obtener los metadatos de un resultado El programa JDBC básico Gestión de errores SQLException El Mensaje de la Excepción El Estado SQL Código de Error del Fabricante Encadenar excepciones SQL Advertencias SQL Resumen 3. Consultas y manipulación de datos en SQL Una sencilla historia de SQL ¿Qué es SQL? SQL y la teoría de conjuntos Acceso a datos mediante SELECT Estructura básica del comando SELECT Especificar las columnas Seleccionar registros no repetidos Dar formato a SQL Cálculos Construcción de fórmulas Especificar los nombres de columna Expresiones con funciones Tipos de datos en SQL Tipos de datos y cálculos Ordenar datos Obtener sólo los primeros n registros Aplicar condiciones a una sentencia SELECT Indicar varias condiciones Búsquedas aproximadas Consideraciones especiales sobre los valores Null Gestionar los valores Null Uso de grupos con funciones estadísticas Restricciones de campos con GROUP BY Uso de HAVING con GROUP BY Realizar consultas con varias tablas Sintaxis alternativa para las uniones internas Cómo funcionan las uniones internas Uniones cruzadas Cómo funcionan las uniones cruzadas Uniones externas Unión externa izquierda Unión externa derecha Unión externa completa Sintaxis alternativa para las uniones externas Uso de tablas dinámicas Resumen 4. Creación de tablas y modificación de datos con SQL Crear y modificar tablas con SQL Crear tablas Limitación de clave principal Limitación de clave externa La limitación CHECK Valores por defecto Modificar tablas con SQL Añadir nuevas columnas o eliminar columnas Añadir limitaciones Eliminar limitaciones Eliminar tablas Añadir, modificar y eliminar datos Añadir datos a las tablas Inserciones en varias filas Eliminar datos de las tablas DELETE frente a TRUNCATE DELETE y las claves externas Actualizar los datos de las tablas Proceso transaccional Resumen 5. Conceptos de diseño de bases de datos relacionales Comprender cómo se hacen las cosas El diseño conceptual Entidades, atributos y valores Desarrollo del diseño lógico Interacciones y relaciones entre entidades Entidades y relaciones en la base de datos Definir las relaciones Claves principales Sobre el orden de las columnas Claves externas Relaciones uno a uno Relaciones de uno a muchos Integridad referencial El proceso de normalización Primera forma normal Segunda forma normal Tercera forma normal Forma normal de Bryce-Codd Cuarta forma normal Quinta forma normal ¿Hasta dónde debe normalizar? Integridad de datos Diseño físico y ajuste Uso de índices Uso de vistas y procedimientos almacenados Vistas Procedimientos almacenados Alarmas Ajuste del rendimiento Pruebas de carga Optimización de consultas y procedimientos Crear y mantener estadísticas Resumen 6. Estudio de un caso: Diseñar la base de datos Music Store El problema Reunir los requisitos Diseño de Music Store: el diseño de la lógica Establecer interacciones entre entidades Diseñar la base de datos Music Store: el diseño físico ¿Qué sistema de gestión de bases de datos (DBMS)? Convenciones de nombres Diseñar la base de datos Los diagramas ERD El área tipo pedidos de clientes Tablas del modelo de datos Las tablas del área tipo discos Recordings AudioStyles Las tablas del área tipo tiendas Tablas del área tipo cliente Customers Las tablas del área tipo pedidos CustomerOrders CustomerOrderItems Poblar las tablas con datos de muestra Insertar valores Utilizar secuencias Utilizar columnas auto numeradas Actualizar valores Eliminar valores Construir soporte para consultas, vistas y procedimientos almacenados Construir una vista de los inventarios Un procedimiento almacenado para todos los valores del inventario Utilizar un activador para generar valores secuenciados Resumen 7. Desarrollo de una aplicación JDBC Modelar objetos Escenas de aplicación Elegir un driver Tipo 1: El driver puente JDBC-ODBC Ventajas del driver puente Desventajas del puente Tipo 2: Driver API Nativo / parte java Ventajas Inconvenientes Tipo 3: Driver protocolo de red/ todo Java Ventajas Inconvenientes Tipo 4: Driver protocolo nativo/todo Java Ventajas Inconvenientes Arquitecturas de aplicación Protocolos de red para Windows NT y 98 Consideraciones en la selección de los driver JDBC Utilizar datos relacionales en nuestra aplicación ¿Dónde se originan los datos? Acceso directo a los datos Crear una capa de persistencia de datos Elegir nuestra aproximación Utilizar un ResultSet Ventajas Limitaciones Utilizar un RowSet Ventajas Limitaciones Transformar un ResultSet en una representación de un objeto Java Ventajas Limitaciones Transformar el ResultSet en una representación XML Ventajas Limitaciones Tomando decisiones de un modo más sencillo Integración de objetos y bases de datos relacionales Integración entre los tipos de datos Java y SQL Integrar datos relacionales en objetos Java Una estrategia mejor de integración Resumen 8. Conectar con una base de datos La clase DriverManager El método getConnection() Asignar la desconexión por tiempo de registro (login timeout) Identificar operaciones con el driver JDBC Conexiones La clase Store Continuación de la clase Store Problemas con la clase Store01 Cerrar recursos Duplicar el código de Connection Utilizar ConnectionFactory Implementar la flexibilidad DataSources Un vistazo al directorio Utilizar un DataSource Resumen 9. Utilizar las interfaces Statement y ResulSet Utilizar objetos Statement Ejecutar un Statement Modificar datos utilizando un objeto Statement Mejoras Actualizar varias columnas Actualizar columnas selectivamente Métodos findByXXX Utilizar objetos ResultSet Recuperar datos de las columnas de un tipo específico Trabajar con valores null Trabajar con tipos especiales de datos Restricciones del ResultSet Movimientos a través de un ResultSet Crear un objeto ResultSet arrastrable Modificar datos utilizando un ResultSet Crear un ResultSet actualizable Métodos para actualizar un ResultSet Novedades en JDBC 3.0 Resumen 10. Uso de metadatos ¿Qué son los metadatos? DatabaseMetaData Obtener la lista de una tabla Uso de metadatos para obtener el esquema ResultSetMetaData Resumen 11. Uso de RowSets Introducción a los RowSets La interfaz RowSet La clase CachedRowSets La clase JdbcRowSet WebRowSet Resumen 12. Sentencias Preparadas La interfaz PrepareStatement Novedades en JDBC 3.0. ParameterMetaData Tipos de datos SQL-99 Tipos integrados (built-in) Tipos definidos por usuario Tipos estructurados Tipo distinct Tipos construidos Tipos locator Novedades en JDBC 3.0 Métodos de la interfaz PrepareStatement Resumen 13. Sentencias de llamada y procedimientos almacenados Procedimientos almacenados Encapsulación y reutilización Control de transacciones Estandarización Requisitos de los procedimientos Nombres Parámetros IN Parámetros OUT Parámetros INOUT Utilización de los parámetros Tipo de los parámetros Ejemplos de procedimientos Ejemplo: Función almacenada Soporte de procedimientos almacenados en bases de datos Sentencias de llamada Crear una sentencia de llamada Utilizar placeholders Actualizaciones en bloque Obtener un ResultSet Novedades en JDBC 3.0 Resumen 14. Transacciones ¿Qué son las transacciones? Tamaño de las transacciones Requisitos de las transacciones Concurrencia en la base de datos Bloqueos exclusivos y compartidos Bloqueos de lectura y bloqueos de escritura El bloqueo a nivel de tabla frente al bloqueo a nivel de fila Bloqueo optimista y pesimista Bloqueos mortales El impacto de los bloqueos sobre el rendimiento Niveles de aislamiento de las transacciones Lectura no confirmada Lectura confirmada Lectura repetible Serializable Resumen del aislamiento ¿Qué niveles de aislamiento están soportados? Control de transacciones en JDBC Métodos de conexión para el control de transacciones Transacciones y procedimientos almacenados Actualizaciones en bloque Transacciones distribuidas Nuevo en JDBC 3.0: los puntos de almacenamiento Utilización de transacciones en Music Store Resumen 15. Conceptos de integración de objetos y bases de datos relacionales Aplicación de la base de datos Recording Integración de objetos y bases de datos relacionales Ejemplo de implementación de una integración Usar la clase Recording con columnas autonumeradas en Cloudscape Aumentar la aplicación Recording Añadir relaciones Añadir una jerarquía de clases de Java Resumen 16. Arquitectura de integración de objetos y bases de datos relacionales Un vistazo a la integración de datos con JLF Objetos de datos integrados Integradores de datos Archivos de propiedad de localización de datos Integración de la tabla Recordings Esquema de la base de datos para la clase Recording Implementación de la clase Recording Archivo de propiedad de localización de datos Una aplicación compleja de la integración de datos JLF Añadir una relación uno con uno Añadir una relación uno con muchos Implementación de la clase CustomerTrackedRecording Ampliación de la implementación de la clase Customer Ampliación de la implementación de la clase Recording Implementación de la clase CustomerTrackingType Añadir una jerarquía de objetos Implementación de la clase VolumeCustomer Implementación de la clase FrecuentBuyer Implementación de la clase Corporation Implementación de la clase NonProfitCorporation Prueba con TestCustomerTracking Dónde ir desde aquí: Opciones de integración de objetos y bases de datos relacionales Resumen 17. Depuración y registro Depuración eficaz Manejo de excepciones Olvidarse de liberar los recursos Problemas de rendimiento Técnicas de depuración Registrar en System.out y System.err Registro de excepciones Seguimiento de recursos Registro de los cronometrajes del rendimiento Ventajas del registro en System.out y System.err Limitaciones del registro en System.out y System.err Ejecución de un depurador interactivo local Manejo de excepciones Seguimiento de recursos Registro de los cronometrajes del rendimiento Ventajas de la depuración interactiva local Limitaciones de la depuración interactiva local Ejecución de un depurador interactivo remoto Depuración remota de los problemas típicos de aplicaciones Java de bases de datos Ventajas de la depuración interactiva remota Limitaciones de la depuración interactiva remota Instrumentación de las aplicaciones Pasos para instrumentar una aplicación Criticidades de los eventos del sistema Granularidad del registro Estándares de instrumentación Implementación de un esquema de registro Instrumentación con JLF Registro de excepciones Seguimiento de recursos Registro de los cronometrajes del rendimiento Ventajas de la instrumentación de las aplicaciones Limitaciones de la instrumentación de las aplicaciones Resumen 18. DataSources de JDBC Conceptos y terminología del DataSource DataSources Tipos de DataSources ¿Cómo funciona un DataSource? Utilización del DataSource Descripción de los directorios Creación y utilización de un DataSource Adaptación a Cloudscape Pool de conexiones Pool de conexiones personalizado El pool de conexiones en la empresa ¿Qué más podemos hacer con un DataSource? Resumen 19. J2EE y aplicaciones Java de bases de datos El entorno de desarrollo Una introducción a J2EE Introducción a los componentes de J2EE Tecnologías componentes Los API de servicio Explotar las características de los contenedores J2EE Aplicaciones de bases de datos en la Web Utilizar servlets Simplificar el desarrollo de una base de datos con JSP Una ojeada a JSP JavaBeans Integrar JavaBean en JSP La página search.html El pool de conexión Enterprise JavaBeans Revisión de EJB Clasificación de los EJB Contenedores EJB Gestión de transacciones Estructura de EJB Persistencia gestionada por contenedor Persistencia gestionada por bean Desplegar un bean Los EJB en la aplicación Music Store ¿Cuál es el método de persistencia más apropiado? Implementar la clase Recording como un EJB La aplicación cliente La interfaz remota La interfaz local La implementación del bean El descriptor de despliegue Resumen 20. Exportar datos relacionales a XML Analizadores XML Los distintos tipos de analizadores XML Bajar el analizador Xerces Instalación del analizador XML Integrar XML con bases de datos relacionales Teoría relacional revisada Integrar una sola tabla con XML Ejecutar el ejemplo SimpleXMLData Integrar una relación uno con muchos con XML Utilizar una estrategia basada en contenido Integración de una relación muchos con muchos en XML Utilizar una estrategia basada en enlace Estrategia basada en contenido vs. basada en enlace Elementos vs. Atributos Resumen 21. Utilizar XSLT Introducción a XSLT ¿Cómo funciona XSLT? XSLT y SQL XSLT, XML y la transformación Procesadores XSLT Bajar el procesador de XSLT Xalan Instalar el procesador de XSLT Xalan Ejemplo 1: Transformar XML en HTML Ejemplo 2: Transformar XML en un archivo plano Sintaxis básica de XSLT Buscar en un documento XML utilizando XPath Problemas habituales con las consultas XPath en XSLT Realizar un bucle a través de un documento XML Aplicar lógica condicional en XSLT Aplicaciones prácticas de XSLT La pantalla de resumen de los pedidos de clientes OrderSummary.jsp CustomerOrder.java orderSummary.xsl ¿Cuál es la gran cosa? Resumen 22. La arquitectura modelo-vista-controlador Los defectos de una aplicación normal Arquitecturas de aplicación visitadas Arquitectura de 2 capas Arquitectura de 3 capas Arquitectura de n capas Arquitectura de aplicaciones: lecciones aprendidas Introducción a la arquitectura MCV Detalles de la arquitectura MVC Controlador controller.jsp RequestHandler.java Modelo Anatomía de un modelo The CustomerList EJB Vista La hoja de estilo customerList.xsl Construir pantallas mejores Construir el EJB AddressMaintenance EJB AddressMaintenance Construir los bean de entidad Customer y PostalCodes Desplegar el EJB de entidad Customers Desplegar el EJB de entidad PostalCodes PostalCodes ejb-jar.xml Desplegar el EJB CustomerList EJB AddressMaintenance Construir addressMaintenance.xsl Desplegar el archivo addressMaintenance.xsl Ejecutar la aplicación MVC de mantenimiento de direcciones Algunos pensamientos finales Resumen A. Conectar con la base de datos Music Store Conectar con Oracle Una breve nota sobre las versiones de Oracle Bajar Personal Oracle 8i Instalar Personal Oracle 8i 8.1.7.0.0 Establecer un escuchador Probar la instalación de Personal Oracle Bajar la base de datos Music Store Los scripts de Oracle The Oracle_Create.sql Script Drivers JDBC de Oracle El driver JDBC/OCI de Oracle El driver JDBC Thin de Oracle Utilizar el driver JDBC Thin Conectar con Cloudscape utilizando el driver RMI-JDBC Conectar con Access Establecer la base de datos Utilizar el Bridge JDBC-ODBC Depurar B. Instalación del servidor de aplicaciones JBoss y el contenedor Web Tomcat Instalación del servidor de aplicaciones JBoss Localización del programa de instalación de JBoss Desempaquetar los archivos de JBoss Ejecución de JBoss Iniciar JBoss con Tomcat Configuración del JDBC en JBoss Instalación de un driver JDBC en JBoss Creación de un pool de conexiones JBoss Instalación de Tomcat como aplicación autónoma Iniciar el Tomcat Detener el Tomcat C. Pequeño manual de XML ¿Qué es un lenguaje de marcas? Etiquetas y elementos Atributos ¿Qué es XML? Cómo se procesan los documentos XML Los bloques de construcción básicos de XML La declaración XML Elementos Atributos Datos de carácter Sector CDATA Referencias de entidad Instrucciones de procesamiento Comentarios Contexto del nombre o namespaces Documet Type Definition DTD La declaración autónoma Declaraciones de elementos Contenido elemento Ejemplo 1: Ejemplo 2: Ejemplo 3: Contenido mixto Contenido solo texto El modelo de contenido EMPTY Modelo de contenido ANY Declaraciones de atributos El atributo tipo CDATA El atributo tipo ID El atributo de tipo IDREF El tipo de atributo IDREFS El atributo tipo ENTITY El atributo tipo ENTITIES El atributo tipo NMTOKEN El atributo tipo NMTOKENS Conjunto enumerado de valores Declaración de atributos de notación #REQUIRED #IMPLIED Declaraciones de valores por defecto Declaraciones de valores #FIXED Declaraciones de notación Declaración de entidades Entidades internas Entidades externas Entidades de parámetros Entidades no analizadas Secciones condicionales Pensando en árboles Un vistazo a la tecnología Esquemas XML El Document Object Model (DOM) Simple API para XML (SAX) XPATH D. Soporte, erratas y p2p.wrox.com Los foros en línea de p2p.wrox.com Cómo inscribirse para recibir soporte Por qué ofrece este sistema el mejor soporte Comprobar las erratas en línea en www.wrox.com Encontrar una errata en el sitio Web Añadir una errata Soporte a clientes Redacción Los autores Lo que no podemos contestar Cómo decirnos exactamente lo que pien alfabético