Introducció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 ejemplos1. 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 piensa
Índice alfabético