Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCIN
Todo el mundo guarda los datos. Las grandes organizaciones gastan millones para cuidar de su nmina de cliente, y los datos de la transaccin. Las sanciones para conseguir que mal son graves: las empresas pueden colapsar, los accionistas y los clientes pierden dinero, y esto sucede para muchas organizaciones (compaas areas, las juntas de salud, empresas de energa), no es exagerado decir que incluso la seguridad personal puede ser puesto en situacin de riesgo. Sin embargo, muchas pequeas bases de datos pueden encontrarse dentro de estas grandes organizaciones y tambin en las pequeas empresas, clubes privados. Cuando estos salen mal, no tiene la portada de los peridicos, pero los costes a menudo son muy graves.
Dnde encontramos estas pequeas bases de datos electrnicas?, en casa, podramos seguir en las libretas de direcciones y catlogos de CD; los clubes deportivos tendrn informacin sobre los miembros; las pequeas empresas podran mantener sus propios datos de los clientes.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 2
Dentro de las grandes organizaciones, tambin habr una serie de pequeos proyectos para mantener los datos que no es fcilmente o convenientemente administrado por el gran nivel de todo el sistema de bases de datos. Los investigadores pueden mantener su propia experimentacin y los resultados de la encuesta; grupos desean administrar sus propias listas o llevar un registro de equipo; los departamentos podrn mantener sus propias cuentas detalladas y de presentar un resumen de la organizacin financiera del software. La mayora de estas pequeas bases de datos son creados por los usuarios finales. Se trata de personas cuyo principal trabajo es algo ms que un ordenador profesional. Ellos suelen ser los cientficos, administradores, tcnicos, contadores, o maestros, y muchos de ellos tienen slo modestos habilidades en hoja de clculo o base de datos de software. Las bases de datos resultantes no suelen estar a la altura de las expectativas. El tiempo y la energa es gastados para crear unos cuadros en una base de datos de productos, como Microsoft Access, o en la creacin de una hoja de clculo en un producto, tales como Excel.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 3
Cmo se equivoc
Una base de datos que no cumple las expectativas se convierte en un costoso ejercicio de manipulacin de datos. Es evidente que tienen el costo del tiempo y esfuerzo gastado en la creacin de un insatisfactorio solicitud. Sin embargo, un problema mucho ms grave es la incapacidad para usar los datos valiosos. Esto es especialmente cierto para los datos de la investigacin. Por desgracia, algunos bastante simples errores en el diseo puede significar que gran parte del potencial de la informacin se pierda.
Otro costo oculto viene de inexactitudes en los datos. Pobre diseo de bases de datos permite que lo que debe evitarse las incoherencias a estar presentes en los datos. La mala manipulacin de las categoras de los datos pueden producir resmenes e informes para inducir a error o, para ser burdo, mal.
24/09/2009
Problemas con una base de datos no son necesariamente causados por la falta de conocimiento sobre la base de datos de un producto en s (aunque esto eventualmente convertirse en una limitacin), pero son a menudo el resultado de haber escogido mala agrupacin de los datos, o en una hoja de clculo. Esto se produce por dos razones principales: No tener una idea clara de qu tipo de informacin tiene la base de datos o una hoja de clculo. No tener un modelo claro de las distintas clases de datos y sus relaciones el uno al otro
Este curso describe las tcnicas para obtener una comprensin precisa de cmo desarrollar un modelo conceptual de los datos implicados, y cmo traducir ese modelo en un diseo de bases de datos. Usted aprender a disear mejores bases de datos. Podrs evitar el costo de "hacer mal".
24/09/2009
Tcnicas de anlisis Mucho anlisis y diseo de metodologas se han desarrollado con gran desarrollo de proyectos en mente. Estas metodologas tienen que abordar las cuestiones de los costos y los contratos, mantenimiento y seguridad, normas e interfaces, y el documentacin necesaria para un proyecto que es demasiado grande para cualquier persona o equipo de comprender en total.
El calendario puede significar la participan de mas equipos de proyecto que podra a su vez cargar ms la totalidad de su personal durante el desarrollo, a fin de que la documentacin se convierte en un crtico factor en el xito del proyecto.
24/09/2009
Determinar el uso Lo que en cualquier proyecto se requiere es un entendimiento claro de exactamente lo que la base de datos lograra. A veces, los clientes pueden tomar delito cuando usted pregunta qu uso le dar a su bases de datos.
Se necesita de cierta disciplina para hacer los preparativos necesarios, especialmente cuando la necesidad de obtener los datos introducidos soy muy importantes. Una manera conveniente de capturar los posibles usos para datos es construir casos de uso o historias de usuario.
Usted puede estar familiarizado con estas ideas, que proceden del Lenguaje Unificado de Modelado (UML) y la Extrema Programming. Los casos de uso son de libre formato de texto, que esencialmente describen las cosas desde el punto de vista de un posible usuario. Por ejemplo, en un caso de uso podra registrar un estadstico los datos de su trabajo sobre la investigacin experimental que depende de la meteorologa.
24/09/2009
Crear un modelo de datos El abismo entre tener una idea bsica de lo que su base de datos debe ser capaz de hacer, y el diseo de las tablas correspondientes, es salvarse por tener un claro modelo de datos. El modelado de datos implica reflexionar muy detenidamente sobre los diferentes conjuntos o clases de datos que necesitamos para una problema particular.
Aqu est un ejemplo simple : una pequea empresa pueda tener clientes,
productos y pedidos. Tenemos que grabar el nombre del cliente. Que pertenece claramente a nuestros conjunto de datos de clientes. Y con respecto a la direccin? Ahora, significa la direccin del cliente de contacto (en cuyo caso pertenece a los datos de los clientes), o cuando nos enva la orden (en cuyo caso pertenece la informacin a la orden)? Qu pasa con el descuento ? Que le pertenece al cliente (algunos de ellos son clientes de tarjetas de oro), o el producto, o la orden (20% de descuento para pedidos superiores a $ 4000)?
24/09/2009
Obtener las respuestas correctas a estas preguntas es, evidentemente, vital si va a proporcionar una base de datos til para usted mismo o su cliente. No es una buena partida hacer una columna en su hoja de clculo "Descuento" antes de tener una comprensin muy precisa de exactamente lo que significa un descuento en el contexto del problema actual.
Los diagramas de modelado de los datos proporcionan en forma precisa y fcil interpretar la documentacin para obtener respuestas a preguntas tales como usted se plantea. An ms importante, el proceso de construccin de un modelo de datos le lleva a preguntarse las preguntas, en primer lugar. Es esto, ms que cualquier otra cosa, que hace este tipo de modelado de datos. Los modelos de datos que va ver en este curso son medianos. Ellos pueden representar una pequeo problema en su totalidad, pero lo ms probable es que ser una pequea parte de un problema ms amplio.
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009
24/09/2009
Los modelos de datos suelen estar representadas visualmente utilizando algn tipo de diagrama. Diagramas le permiten tener a una gran cantidad de informacin de un vistazo, dndole la capacidad de captar rpidamente la esencia de un diseo de bases de datos sin tener que leer un montn de texto.
Vamos a utilizar el diagrama de clase de notacin UML para representar a nuestros modelos de datos, pero muchas otras notaciones son igualmente tiles.
24/09/2009
10
Implementacin de base de datos Una vez que usted tiene un modelo de datos que apoye a sus casos de uso (y todos los dems detalles que se han descubierto en el camino), usted sabe cun grande es su problema y el tipo de detalle que implica. Ahora tiene una buena base para el diseo de una adecuada aplicacin y la realizacin de la aplicacin.
Conceptualmente, la traduccin del modelo de datos para el diseo de una base de datos o una hoja de clculo es simple. En las prximas lecciones , vamos a ver la forma de disear tablas y relaciones en una base de datos relacional (como Microsoft Access), que representan la informacin en el modelo de datos. Adems tambin veremos cmo esto podra hacerse en uno base de datos orientado a objetos, y por problemas con no demasiadas clases de datos, cmo puede capturar parte de la informacin en un producto de hoja de clculo como Microsoft Excel.
24/09/2009
11
La traduccin del modelo de datos al diseo de bases de datos es bastante sencillo, sin embargo, la aplicacin real no es tan simple. Una gran cantidad de trabajo es necesario para asegurar que la base de datos sea til al usuario final. Esto significar disear una interfaz de usuario con una clara lgica, la buena entrada de los datos, la capacidad de encontrar rpidamente los datos de editar o borrar, adaptable y preciso para consultar e informar las caractersticas, la capacidad de importacin y exportacin de datos, y las buenas instalaciones de mantenimiento, tales como copia de seguridad y archivo.
No subestime el tiempo y la experiencia necesario para completar una aplicacin til incluso para las ms pequeas base de datos. Consideraciones tales como la interfaz de usuario, mantenimiento, archivo, estn fuera del alcance de este curso, pero estarn bien cubiertas en el aspecto practico del curso.
24/09/2009
12
CAPTULO 1 Qu puede salir mal Palabras claves, mala gestin y las categoras Informacin repetida El diseo de un nico informe Resumen
24/09/2009
13
Qu puede salir mal El problema con una serie de pequeas bases de datos (y muy probablemente con muchos grandes queridos) es que la idea inicial de cmo registrar los datos no es necesariamente la correcta. A menudo, una tabla o una hoja de clculo est diseado para imitar una posible entrada de datos. Esta prctica puede ser adecuada para resolver el problema inmediato (por ejemplo, almacenar los datos en alguna parte), sin embargo, simulando una pantalla de entrada de datos o un informe en su diseo de bases de datos a menudo causa problemas ms adelante. Se puede hacer que sea difcil o imposible para obtener informacin para los distintos informes o resmenes, no obstante, deben estar disponibles teniendo en cuenta los datos recogidos. En este captulo se presentan ejemplos extrados de la vida real para ilustrar algunos tipos bsicos de los problemas surgidos cuando los datos se almacenan en las hojas de clculo mal diseados o tablas.
24/09/2009
14
Estos son ejemplos reales que he encontrado en mi propio trabajo de diseo. No proceden de un libro de texto o de un examen de papel. Algunos de los datos ha sido suprimida o modificadas para proteger la identidad de los culpables. Mala gestin de palabras claves y categoras Un problema comn en el diseo de bases de datos es el fracaso para tratar adecuadamente con palabras clave y categoras. Muchas aplicaciones de bases de datos implica que los datos se clasifican de alguna manera: productos o acontecimientos pueden ser de inters para determinadas categoras de personas, los clientes pueden ser clasificados por edad o los intereses o los ingresos (o los tres). Al introducir datos, por lo general, pensar en un tema con su particular lista de categoras o palabras clave. Sin embargo, cuando usted llegado a la preparacin de informes o hacer algunos anlisis, puede que tenga que ver las cosas al revs.
24/09/2009
15
A menudo quieren ver una categora con una lista de todos sus elementos, o un ttulo con el nmero de artculos. Por ejemplo, usted podra preguntar "Cul es el porcentaje de clientes que son buenos pagadores? "Si las palabras clave y categoras no son almacenados correctamente inicialmente, estos informes pueden llegar a ser muy difcil de producir. Ejemplo 1 describe un caso sobre la informacin de cmo se utilizan las plantas, y se registra de una manera que parece razonable a primera vista, pero que en ltima instancia no se puede manipular y se le hace muy difcil crear reportes especficos para cada planta en cuanto a su uso, etc.
24/09/2009
16
La Figura 1 muestra una pequea porcin de una tabla de base de datos registro de los datos sobre las plantas. Junto con el genero, especie y nombre comn de cada planta, el promotor botnico decide que sera conveniente hacer a la informacin mostrada para mantener la informacin mas precisa de una planta. Esto es para ayudar a los futuros cultivadores de decidir si una planta es apropiada para sus necesidades. Figura No 1
Vivienda (SHELTER) Maderas (TIMBER) Para alimentacin de aves (BIRD FOOD) Estabilidad del suelo (SOIL STABILITY)
24/09/2009
17
En el Ejemplo 1, la verdadera vergenza es que todos los datos han sido recogidos cuidadosamente y entr, pero el diseo del cuadro que hace que sea imposible dar respuesta a las preguntas obvias convenientemente. El problema es que el desarrollador no tiene tiempo de dar un paso atrs y examinar los probables usos de los datos.
El diseo de la base de datos principalmente debe satisfacer su problema inmediato, que es "necesario para almacenar toda la informacin que tenemos sobre cada planta." Antes de embarcarse en la puesta en prctica, habra sido til tener en cuenta otros puntos de punto de vista y posibles usos de los datos. La ms obvia de ellas es "Quiero encontrar todas las plantas que cuentan con este uso en particular.
24/09/2009
18
En el Ejemplo 1, realmente tenemos dos tipos o clases de datos, las plantas y sus usos, y estamos interesados en las conexiones entre ellos. Las tcnicas de modelado de datos se describe en el resto del curso, que es una forma prctica de aclarar exactamente qu es lo que usted esperar de sus datos y ayudar a decidir cul es el mejor diseo de bases de datos para apoyar eso. Saltando un poco por delante para ver una solucin para la base de datos planta del problema, puede configurar rpidamente una til base de datos relacional mediante la creacin de los dos tablas como se muestra en la Figura 1-2.
24/09/2009
19
Figura 1-2. La mejora del diseo de bases de datos para representar las plantas y los usos
24/09/2009
20
24/09/2009
21
24/09/2009
22
24/09/2009
23
Una breve historia de las bases de datos La Base de datos moderno surgi en el decenio de 1960 gracias a la investigacin en IBM, entre otras empresas. La investigacin centrada principalmente en torno a la automatizacin de oficinas, en particular la automatizacin de almacenamiento de datos y indexacin de las tareas que anteriormente requera una gran cantidad de mano de obra. La potencia de las computadoras y almacenamiento se ha convertido en mucho ms barato, con lo que el uso de computadoras para los datos de indexacin y almacenamiento era una solucin viable. Un pionero en la base de datos de campo fue Charles W. Bachman, que recibi el Premio Turing en 1973 por una labor pionera en la tecnologa de base de datos. En 1970, un investigador de IBM llamado Ted Codd public el primer artculo sobre las bases de datos relacionales. A principios del decenio de 1980, los primeros sistemas de bases de datos basado en el estndar SQL apareci en las empresas tales como Oracle, con Oracle, versin 2, y, posteriormente, SQL / DS de IBM, as como una serie de otros los sistemas de otras empresas.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 24
Lenguaje estructurado de consultas (SQL) La primera pregunta que hacer es lo que es SQL y cmo utilizarlo con bases de datos. SQL tiene tres funciones principales: Creacin de una base de datos y la definicin de su estructura. Consultar a la base de datos para obtener los datos necesarios para responder a las preguntas. Seguridad de control de las base de datos. La definicin de estructura de base de datos incluye la creacin de nueva base de datos tablas y campos, el establecimiento de normas de datos entrada, y as sucesivamente, que se expresa por un sub lenguaje SQL llamado lenguaje de control de datos (DCL).
24/09/2009
25
La introduccin a las consultas SQL Las consultas SQL son las ms comunes en el uso del SQL. Un sub lenguaje SQL llamado lenguaje de manipulacin de datos (DML) se refiere a las consultas y manipulacin de datos. Por ejemplo, con un base de datos que almacena detalles de los vendedores, las ventas de automviles, el tipo vendido, y as sucesivamente, es posible que se desee conocer el nmero de coches vendidos por cada vendedor en cada mes y la cantidad de dinero que hizo la empresa. Usted puede escribir una consulta SQL a esa pregunta y obtener la respuesta. Una consulta SQL consiste en diversas declaraciones, clusulas y condiciones. Una declaracin es una instruccin o un comando. Una clusula especifica los lmites a una declaracin, los lmites que se especifican mediante condiciones.
SELECT CarModel FROM CarSales WHERE CarSoldDate BETWEEN May 1 2005 AND May 31 2005;
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 26
La comparacin de SQL a otros lenguajes de programacin Ahora que sabes para que puedes utilizar SQL, puedes compararlo con otros lenguajes de programacin. Para ser honestos, SQL es bastante diferente de los lenguas de procedimiento, tales como C + +, Visual Basic, Pascal, y otra tercera generacin de lenguajes de programacin, que permiten a los programadores escribir paso a paso instrucciones dicindole al ordenador exactamente qu hacer para lograr un determinado objetivo. Tomando la venta de automviles de ejemplo, su objetivo podra ser la de seleccionar toda la informacin sobre las ventas realizadas en julio en la sala de exposicin de Nueva York. Muy aproximadamente en su lengua de procedimiento podra hacer lo siguiente: 1. Las carga de ventas de los datos en la memoria del ordenador. 2. Extracto de los elementos individuales de datos a partir de los datos de ventas. 3. Revisar para ver si cada uno de los elementos de datos es a partir del mes de julio y de la sala de exposicin de Nueva York. 4. Si es as, entonces hacer una nota de los datos.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 27
5. Volver a la orden del da de los datos y seguir hacia adelante hasta que todos los temas han sido verificados. 6. Loop a travs de los datos y mostrar los resultados de cada uno de ellos. SQL, sin embargo, es un lenguaje declarativo. En las ventas de automviles de ejemplo, si estas usando SQL, usted podra escribir lo siguiente:
SELECT * FROM SalesMade WHERE SaleDate = July 2005 AND SalesOffice = NewYork
Comprender las normas SQL Al igual que ocurre con las bases de datos, IBM hizo una gran parte del trabajo original de SQL. Sin embargo, un montn de otros proveedores de IBM se ocupa de la norma y desarrollado sus propias versiones del mismo. Habiendo tantos dialectos diferentes causando bastante dolor de cabeza para el desarrollador, en 1986 fue aprobado por el organismo de normalizacin del Instituto Nacional Estadounidense de Estndares (ANSI) y en 1987 por la Organizacin Internacional de Normalizacin (ISO), que cre un estndar para SQL. Aunque esto ha ayudado a minimizar las diferencias entre los diversos dialectos SQL, todava hay diferencias entre ellos.
24/09/2009
29
El siguiente cuadro ofrece un breve resumen de las diversas normas y actualizaciones de dichas normas.
24/09/2009
30
Este curso se concentra en SQL-92, SQL-99, y SQL-2003 debido a que la mayora de sus caractersticas han sido aplicado a la mayora de base de datos relacionales de gestin de sistemas (RDBMS). Aunque las normas son importantes para ayudar a traer algn tipo de coincidencia entre los distintos RDBMS, al final del da lo que funciona en la prctica es lo que realmente cuenta. En lugar de debatir interminablemente las normas, este curso le proporcionara informacin para ayudarle en el mundo real de las bases de datos.
24/09/2009
31
24/09/2009
32
Dicho esto, la siguiente seccin le muestra cmo crear tu propia base de datos SQL.
24/09/2009
33
24/09/2009
34
24/09/2009
35
24/09/2009
36
24/09/2009
37
24/09/2009
38
CREATE TABLE Films ( FilmId integer, FilmName varchar(100), YearReleased integer, PlotSummary varchar(2000), AvailableOnDVD char(1), Rating integer, CategoryId integer ); CREATE TABLE Category ( CategoryId integer, Category varchar(100) );
CREATE TABLE MemberDetails ( MemberId integer, FirstName nvarchar(50), LastName nvarchar(50), DateOfBirth datetime, Street varchar(100), City varchar(75), State varchar(75), ZipCode varchar(12), Email varchar(200), DateOfJoining datetime ); CREATE TABLE Attendance ( MeetingDate datetime, Location varchar(200), MemberAttended char(1), MemberId integer );
24/09/2009
40
Modelo relacional de la BD
Explicando?
24/09/2009
41
24/09/2009
42
24/09/2009
43
24/09/2009
44
Entering Information
Ya se examin la creacin de una base de datos y la adicin de tablas, por lo que ahora usted est listo para empezar agregando los datos. La mayora de RDBMS proporcionar herramientas de gestin que permiten ver las tablas y los registros que poseen, as como tambin le permite aadir, modificar y borrar los datos. Estas herramientas son muy conveniente cuando se tiene pequeas cantidades de datos o cuando usted est haciendo una prueba de la base de datos. Sin embargo, usted no suelen introducir datos utilizando las herramientas de gestin. Mucho ms comn es algn tipo de programa o una pgina Web que acta como una interfaz agradable en el que el usuario introduce los datos. Este captulo se centra en cmo utilizar comandos SQL para insertar, actualizar o borrar datos contenida en una base de datos. Este captulo abarca los tres sentencias SQL que se ocupan de alterar los datos. El primero es la declaracin INSERT, que introduce nuevos datos. El UPDATE actualiza los datos existentes en la base de datos. Por ltimo, este captulo se refiere a la declaracin DELETE, que (sorpresa, sorpresa) suprime registros.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 45
24/09/2009
46
24/09/2009
47
24/09/2009
48
24/09/2009
49
Tenga en cuenta que las fechas en la tabla anterior se especifican en el formulario de ao-mes-da, por lo que 23 de febrero de 2004, se introduce como 2004-02-23. El formato exacto aceptable para cada sistema de base de datos vara no slo con el sistema de bases de datos, sino tambin con la forma en que la base de datos fue creado e instalado, as como el formato fecha / hora especificado por el propio ordenador. Sin embargo, el formato ao-mes-da no funciona por defecto en la instalacin de Oracle. Para Oracle, utiliza el formato de day-month_name-year. Por lo tanto, usted deber escribir 9 de enero de 1977. Las ventajas de no nombrar a las columnas de su sentencia INSERT, es que se salva de escribir y se le hace ms corto la sentencia SQL.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 50
Updating Data
No slo es necesario aadir nuevos registros, pero en algn momento usted tambin tiene la necesidad de cambiar los registros. Para actualizar los registros, usted utilizara el comando UPDATE. Especificar los registros a cambiar es la principal diferencia entre la insercin de nuevos datos y actualizar los datos existentes. Usted especifica que para actualizar los registros utiliza la clusula WHERE, que le permite especificar que slo los registros de actualizacin son aquellos en los que una determinada condicin es verdadera.
El comando UPDATE permite la configuracin para actualizar los campos. La sintaxis bsica para la actualizacin es la declaracin siguiente:
24/09/2009
51
24/09/2009
52
24/09/2009
53
24/09/2009
54
24/09/2009
55
Deleting Data Hasta ahora, en este captulo, usted ha aprendido la manera de aadir nuevos datos y actualizar los datos existentes, por lo que todo lo que queda a aprender es cmo borrar los datos. La buena noticia es que la supresin de los datos es muy fcil, y si es necesario, aadir una clusula WHERE para especificar que los registros para borrar.
Si desea borrar todos los registros de una tabla, simplemente dejar de lado la clusula WHERE, como se muestra en la siguiente declaracin:
24/09/2009
56
24/09/2009
57
Extracting Information Hasta el momento usted ha aprendido a crear una base de datos y la forma de insertar datos en ella, por lo que ahora puede aprender la manera de extraer los datos de su base de datos. Probablemente, su caracterstica mas potente de SQL es su capacidad para extraer los datos, y la extraccin de datos puede ser tan simple o complejo como usted requiere. Usted puede simplemente extraer datos de la misma forma en que fue introducido en la base de datos, o se puede consultar la base de datos y obtener respuestas a las preguntas a partir de los datos bsicos. La clave para obtener los datos, es la sentencia SELECT, que en su forma bsica es muy simple y fcil de usar. Sin embargo, a medida que veremos los captulos, usted vera los lotes de opciones adicionales que hacen de la sentencia SELECT muy potente.
24/09/2009
58
24/09/2009
59
Ejecute
24/09/2009
60
Si desea conocer todos los valores nicos en un registro, cmo ir sobre la recuperacin de ellos?, la respuesta es mediante el uso de la palabra clave DISTINCT. La palabra clave DISTINCT se aadir a la declaracin del SELECT, directamente despus de la palabra clave SELECT. Por ejemplo, si alguien le pide de que ciudades proceden los miembros, usted podra intentar una consulta similar a lo siguiente:
24/09/2009
61
Ejecute
24/09/2009
62
Ejecute
24/09/2009
63
Using Aliases
24/09/2009
64
24/09/2009
65
24/09/2009
66
Trabajo Practico Cinco nuevos miembros se han unido al club, por lo que sus datos deben incluirse en la base de datos. Lo siguiente detalla cmo se deber aadir los nuevos miembros para la de base de datos:
24/09/2009
67
24/09/2009
68
24/09/2009
69
24/09/2009
70
24/09/2009
71
24/09/2009
72
24/09/2009
73
24/09/2009
74
Recordar que el operador AND tiene precedencia sobre el operador OR, se puede adivinar la forma en que la siguiente sentencia SQL seria evaluado.
24/09/2009
75
24/09/2009
76
BETWEEN Operator
El operador BETWEEN le permite especificar un rango, donde el rango es de entre uno y otro valor. Hasta ahora, cuando usted necesita para comprobar si hay un valor dentro de un cierto rango, que utiliz el operador "mayor o igual al (> =) o el" menor o igual que "(<=). Las siguientes sentencias SQL utilizan el operador BETWEEN para seleccionar las pelculas con una calificacin crediticia entre 3 y 5:
Si utiliza el operador BETWEEN, se puede ver que ofrece exactamente los mismos resultados que los operadores "mayor o igual a "(> =) y" menor o igual que "(<=). Es sumamente importante recordar que el operador BETWEEN es inclusivo, lo que significa que en el anterior cdigo, 3 y 5 tambin se incluyen en el rango.
24/09/2009
77
Puede utilizar BETWEEN con tipos de datos distintos, como texto y las fechas. Tambin puede utilizar el operador BETWEEN en conjuncin con el operador NOT, en cuyo caso SQL selecciona un valor que no est en el intervalo de valores especificados, como puede ver en las siguientes sentencias.
24/09/2009
78
Between en accin
Explique
Explique
24/09/2009
79
LIKE Operator El operador LIKE le permite utilizar caracteres comodn cuando se busca un personaje sobre el terreno. Un comodn es un carcter que no coincide con un carcter especfico, sino que coincide con cualquier carcter o de cualquier uno o ms caracteres. Un ejemplo de su uso sera averiguar los detalles de todos los miembros del Club de Pelcula cuyo apellido comienza con J. En el siguiente cuadro se detallan los dos caracteres disponibles.
24/09/2009
80
Like en accin
24/09/2009
81
Nota: En algunos sistemas de bases de datos, el operador LIKE se distingue entre maysculas y minsculas; en otros no lo es. Oracle, por ejemplo, es distingue entre maysculas y minsculas, por lo LIKE 'J%' slo coincide con una J mayscula seguida de uno o ms caracteres. En el servidor SQL, como 'J%' coincide con una letra en maysculas o minsculas J seguido de uno o ms caracteres.
24/09/2009
82
Recuerde que en algunos sistemas de bases de datos, el operador LIKE se distingue entre maysculas y minsculas, de modo SIMILAR D___s comienza con un capital D. En otros sistemas coincide con maysculas y minsculas Ds. Oracle y DB2 distinguen entre maysculas y minsculas; MS SQL Server, MySQL, y MS Access no lo distinguen. Asimismo, recuerda que en MS Access es necesario que usted utilice un signo de interrogacin (?) en lugar del subrayado.
24/09/2009
83
24/09/2009
84
24/09/2009
85
Hasta el momento, los resultados de una consulta han llegado, cualquiera que sea su fin la base de datos decide, que suele basarse en la orden en que se introdujeron los datos, a menos que la base de datos est diseado de otra manera (como pueden ver en los captulos posteriores).
Sin embargo, los resultados de una consulta lista en un orden determinado (una lista de nombres en orden alfabtico o una lista de aos en orden numrico), a menudo viene muy bien. SQL le permite especificar el orden de los resultados con la Clusula ORDER BY. La clusula ORDER BY va justo al final de la sentencia SELECT. Le permite especificar la columna o columnas que determinar el orden de los resultados y si la orden es ascendente (el ms pequeo a mayor) o descendente (mayor a menor).
24/09/2009
86
Por ejemplo, la siguiente sentencia SQL muestra una lista de aos de lanzamiento de pelculas al cine.
Salida:
24/09/2009
87
Salida:
24/09/2009
88
24/09/2009
89
Joining ColumnsConcatenation No slo SQL le permite consultar diversas columnas, sino que tambin le permite combinar una o ms columnas y dar como resultado la columna con un alias. Tenga en cuenta que el uso de un alias no tiene ningn efecto sobre la tabla en s; usted no crea realmente una nueva columna en la tabla, slo uno de los resultados establecidos. Por ejemplo, si usted tiene los datos de ABC y concatenar a DEF, se obtiene ABCDEF. Slo se tratara de concatenar literales de texto o columnas que tienen el tipo de dato char o varchar. Por lo tanto, cmo se van concatenando sobre el texto? Por desgracia, concatenar texto vara en funcin de la sistema de bases de datos que est utilizando. Usted simplemente necesita a leer la seccin de inters para el sistema de base de datos que est utilizando.
24/09/2009
90
24/09/2009
91
Ejecute lo siguiente:
24/09/2009
92
24/09/2009
93
Cul es la salida?
24/09/2009
94
24/09/2009
95
Selecting Data from More Than One Table Usando el SQL que has aprendido hasta el momento, se puede extraer datos de una sola tabla en la base de datos, que es muy a menudo debido a la limitacin de respuestas que requieren los datos de una o ms tablas. Los desarrolladores de SQL asumen esta limitacin y ponen en prctica una forma de unir datos de ms de una tabla en un conjunto de resultados. El uso de la palabra une no es accidental, en SQL esta palabra clave es JOIN y hace referencia a la unin de una o ms tablas. Posteriormente se examinaran todos los diferentes tipos de uniones, pero en esta parte se refiere a la ms comnmente utilizada (y tambin lo ms fcil de usar).
24/09/2009
96
La sintaxis es :
Salida:
24/09/2009
97
Otra manera :
Salida :
24/09/2009
98
24/09/2009
99
24/09/2009
100
Salida:
24/09/2009
101
Explique?
24/09/2009
102
Salida:
24/09/2009
103
24/09/2009
104
Este captulo tiene que ver con mejorar el diseo de una base de datos en trminos de facilidad de gestin, la eficiencia, y limitar los riesgos de introduccin de datos no vlidos. El captulo comienza con un poco de teora y se refiere a la prctica, en particular la base de datos del Club de Cine. Se trata de mejorar la eficiencia en trminos de almacenamiento de datos y reduccin al mnimo del espacio perdido.
24/09/2009
105
Normalizacin Al inicio del curso se discuti la forma de disear la estructura de base de datos utilizando tablas y campos, a fin de evitar problemas como la duplicacin innecesaria de datos y la imposibilidad de identificar de forma exclusiva los registros.
Aunque no se pidi la normalizacin en aquel entonces, que fue el concepto utilizado. En esta seccin se explica la normalizacin con ms detalle y cmo utilizarlo para crear bien una estructura de bases de datos. La normalizacin consiste en una serie de directrices que ayuden a orientar en la creacin de una buena estructura de base de datos. Tenga en cuenta que son directrices y no reglas a seguir ciegamente. El diseo de bases de datos es, probablemente, tanto el arte como es la ciencia, y su propio sentido comn es importante, tambin.
24/09/2009
106
Las directrices de la normalizacin se dividen en formas normales; pensar de forma que el formato o la forma en que un estructura de base de datos est establecido. Examinaremos slo las tres primeras formas, para ir a la normalizacin de una base de datos. El objetivo de las formas normales es organizar la estructura de base de datos a fin de que cumpla con las normas de la primera forma normal, la segundo forma normal y, por ltimo, tercera forma normal.
24/09/2009
107
Primera forma normal Al inicio del curso camin a travs de algunos pasos bsicos para crear una buena organizacin de la estructura de la base de datos. En particular, se dijo que usted debe hacer lo siguiente: Definir los datos necesarios, porque se convierten en las columnas de una tabla. Asegrese de que no hay repeticin de grupos de datos. Asegrese de que hay una clave primaria. Estas normas son aquellas de la primera forma normal, por lo que has cubierto primera forma normal sin siquiera saberlo. En la base de datos del club cine, ya cumple con la primera forma normal, pero para refrescar la memoria, aqu se da un resumen breve de la primera forma normal. En primer lugar, debe definir los elementos de informacin. Esto significa mirar a los datos que deben almacenarse, la organizacin de los datos en columnas, definir qu tipo de dato cada columna contiene, y por ltimo, poner en columnas relacionadas con los de su propia tabla.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 108
El siguiente paso es asegurarse de que no hay repeticin de grupos de los datos. Un ejemplo de cmo los registros tienen el aspecto siguiente en la tabla para la 1FN, se muestra a continuacin:
24/09/2009
109
Segunda forma normal Primera forma normal requiere que todas las tablas deben tener una clave primaria. Esta clave primaria puede constar de uno o ms columnas. La clave principal es el identificador nico de ese registro, y la segunda forma normal establece que no debe haber dependencias parciales de cualquiera de las columnas de la clave primaria. Por ejemplo se puede crear una tabla llamada ActorFilms con las siguientes columnas:
24/09/2009
110
II. Segundo creamos una tabla que almacene los detalles de los autores.
24/09/2009
111
III . Finalmente creamos una tercera tabla que almacene los FilmIds Y ActorIds , para saber que actores protagonizaron que pelcula.
Ahora las tablas estn en segunda forma normal. Puedes buscar en cada tabla y se puede ver que todas las columnas son vinculado a la clave principal, salvo que las dos columnas en la tercera tabla componen la clave primaria.
24/09/2009
112
Tercera forma normal Tercera forma normal es un poco ms opcional, y su uso depende de las circunstancias. Una tabla est en tercera forma normal cuando se cumplan las siguientes condiciones: Es en la segunda forma normal. Todos los campos no primarios son dependientes de la clave primaria. La dependencia de campos no primarios se sita entre los datos.
24/09/2009
113
La dependencia de campos no primarios se sita entre los datos. Por ejemplo, nombre de calle, ciudad, estado son vinculados al cdigo postal. Por ejemplo, la calle, ciudad, y estado, tienen asignada un nico cdigo postal. La dependencia del cdigo postal y la direccin se llama una dependencia transitiva. Eche un vistazo a la base de datos del Cine Club. Puedes ver que esta tabla no esta en la tercera forma normal? Echa un vistazo a la tabla MemberDetails:
24/09/2009
114
La Calle, Ciudad, Estado y todos los campos tienen una dependencia transitiva en el campo de Cdigo postal. Para cumplir con tercera forma normal, todo lo que necesita hacer es mover la calle, Ciudad y Estado en sus mbitos propios de otra tabla, que usted puede llamar a la tabla de Cdigo Postal: Tabla: Cdigo Postal
24/09/2009
115
A continuacin, modificar la tabla MemberDetails y eliminar los campos Calle, Ciudad, Estado, lo que deja el campo Cdigo como una manera de hacer coincidir la direccin que figura en el cuadro Cdigo postal: Tabla MemberDetails :
24/09/2009
116
Las ventajas de eliminar las dependencias libres son principalmente de dos tipos. En primer lugar, la cantidad de datos se reduce y la duplicacin, y por tanto, se convierte la base de datos ms pequea. Dos o ms personas que viven en la misma calle en la misma ciudad en la misma ciudad tienen el mismo cdigo postal. En lugar de almacenar todos los datos en mas de una vez, almacenar slo una vez en la tabla Cdigo postal para que el Cdigo postal se almacene solo una vez. La segunda ventaja es la integridad de los datos. Cuando los datos duplicados cambian hay un gran riesgo de actualizacin de slo algunos de los datos, especialmente si se extiende en una serie de lugares diferentes en la base de datos. Si la direccin y cdigo postal de los datos se almacenan en tres o cuatro tablas diferentes, entonces cualquier cambio de los cdigos postales tendra que recorrer todos los registros en las tres o cuatro tablas. Sin embargo, si se almacenan todos en una sola tabla, entonces usted necesita cambiar en un solo lugar. Hay un aspecto negativo sin embargo, el cual aade complejidad y una menor eficiencia.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 117
24/09/2009
118
Los operadores matemticos bsicos No es ninguna gran sorpresa al enterarse de que los cuatro operadores matemticos bsicos son multiplicacin, divisin, resta, y adems, que se enumeran en la tabla siguiente, junto con los operadores que SQL utiliza para ellos representan:
24/09/2009
119
24/09/2009
120
Funciones matemticas comunes El estndar SQL (y casi todos las aplicaciones SQL) contiene cuatro funciones bsicas de matemticas. Sin embargo, una serie de otras funciones matemticas existen, que, aunque no en el estndar ANSI SQL, se encuentran en suficientes implementaciones de bases de datos que vale la pena listar aqu.
The ABS() Function :
24/09/2009
121
24/09/2009
122
24/09/2009
123
El RAND(), que es la abreviatura de azar, genera un nmero aleatorio fraccionada entre 0 y 1. Tenga en cuenta que en MS Access la funcin se llama RND(). Oracle, sin embargo, no es compatible con la funcin RAND (), pero s una funcin de apoyo RANDOM adicionales dentro de un paquete llamado DBMS_RANDOM.
24/09/2009
124
24/09/2009
125
24/09/2009
126
La funcin FLOOR() trabaja en el sentido contrario como lmite mximo en el sentido de que los redondeos se realizan al siguiente ms bajo valor entero. Por ejemplo, 3,35 se redondear hacia abajo a 3; 5,99 redondear hacia abajo a 5, y -3,35 redondear hacia abajo a -4; -4 es inferior a -3. Una vez ms FLOOR() no es compatible con MS Access.
24/09/2009
127
24/09/2009
128
The ROUND() Function En lugar de redondear siempre como lmite mximo o hacia abajo como lo hace FLOOR(), la funcin ROUND() redondea basado en los dgitos despus del punto decimal. Si el dgito despus del punto decimal es de 4 o menos, entonces es simplemente eliminado. Si el dgito despus del punto decimal es de 5 o ms, entonces el nmero se redondea al nmero mayor entero y el dgito es eliminado. Por ejemplo, 3.55 redondeado a un nmero entero utilizando ROUND() sera 4, mientras que 3.42 redondeado a un nmero entero que no deber exceder de 3.
Por lo tanto, -4,6 redondeado al prximo entero es ms alto -5. A diferencia de CEILING() y FLOOR(), la funcin ROUND() cuenta con el apoyo de MS Access.
24/09/2009
129
Sintaxis:
24/09/2009
130
Introducing String Functions En esta seccin usted camina a travs de una serie de funciones muy tiles que le permiten manipular cadenas y bsqueda basados en los datos. Cadena de datos es un nombre colectivo para un grupo de caracteres, como el nombre de una persona o un grupo de nmeros. A pesar de que cada carcter se almacena en su propia ubicacin de memoria, la base de datos le permite manipular una columna de caracteres al mismo tiempo.
The SUBSTRING() Function
El SUBSTRING () le permite obtener slo una parte de una cadena de uno o ms caracteres de la toda la cadena de caracteres. Cuando se utiliza esta funcin, es importante recordar que una cadena no es ms que un cadena de caracteres individuales. Por ejemplo, Wrox Press es una cadena, y cada uno de los personajes son de la siguiente manera:
24/09/2009
131
El SUBSTRING () trabaja en el carcter. La funcin toma tres parmetros: la cadena de la cual se obtiene la subcadena, el primer carcter que debe obtenerse, y el nmero de caracteres en total. Considere la siguiente sintaxis:
MS Access no utiliza el SUBSTRING(). En lugar de ello, emplea el MID(), que tiene exactamente la misma sintaxis y obra de la misma manera como lo hace el SUBSTRING(). As que si ests usando MS Access, dondequiera que vea SUBSTRING(), basta con sustituirla por MID(). Oracle y DB2 de IBM apoyan a la funcin SUBSTRING(), pero ellos lo llaman SUBSTR(). Si est utilizando Oracle o DB2, dondequiera que vea SUBSTRING(), sustituirla por SUBSTR ().
24/09/2009
132
24/09/2009
133
24/09/2009
134
24/09/2009
135
Funciones TRIM()
Recorte implica la eliminacin de caracteres no deseados desde el principio al final de una cadena. En la mayora de implementaciones de bases de datos, el nico personaje que se puede recortar es el espacio. Si quieres regresar los caracteres que se insertaron y sin espacios, puedes recortar los espacios con una de las dos funciones de acabado: LTRIM () o RTRIM(). LTRIM() elimina los espacios a la izquierda de los caracteres, mientras que RTRIM() elimina los espacios a la derecha de los caracteres. Por lo tanto, si desea eliminar los espacios del ejemplo en la tabla definida anteriormente, usted utilizara RTRIM ():
24/09/2009
136
24/09/2009
137
24/09/2009
138
24/09/2009
139
24/09/2009
140
24/09/2009
141
24/09/2009
142
24/09/2009
143
24/09/2009
144
24/09/2009
145
24/09/2009
146
24/09/2009
147
The COALESCE() Function La funcin COALESCE() devuelve el primer valor NOT NULL de la lista de valores que le pasa como argumentos. Si todos los argumentos son NULL, entonces la funcin devuelve NULL. Tenga en cuenta que MS Access soporta esta funcin. Tenga en cuenta que cada argumento pasado a la funcin COALESCE() debe ser del mismo tipo de datos (una cadena o un nmero) o uno que pueda convertirse. Si obtiene un error al pasar diferentes tipos de datos como argumentos, entonces utilizar el CAST().
24/09/2009
148
24/09/2009
149
24/09/2009
150
24/09/2009
151
24/09/2009
152
24/09/2009
153
Grouping Results En esta seccin se examina la clusula GROUP BY, que se utiliza en conjuncin con el comando SELECT. Permite que usted agrupe datos idnticos en un subconjunto. La Clusula GROUP BY es mas poderoso cuando se utiliza con SQL y con el resumen de funciones de agregacin. GROUP BY es tambin muy til con subconsultas, un concepto examinado en el Captulo 7. Example:
24/09/2009
154
24/09/2009
155
24/09/2009
156
Resumiendo y agregar los datos Hasta ahora, los resultados obtenidos de la base de datos han consistido en un conjunto de registros individuales en lugar de registros que se han resumido ,digamos, incluyendo un promedio de los registros o contando los mismos. Counting Results Puede utilizar el COUNT() para contar el nmero de registros en los resultados. Dentro de los parntesis de la funcin COUNT() inserte el nombre de la columna que desea contar. El valor devuelto en los resultados es el nmero de valores NO NULL en la columna. Alternativamente, usted puede insertar un asterisco (*), en cuyo caso todas las columnas de todos los registros de los resultados se cuentan con independencia de si el valor es NULL o no. La funcin COUNT() tambin puede aceptar las expresiones, por ejemplo COUNT(MemberID +CategoryID ).
24/09/2009
157
24/09/2009
158
Ejemplo de estudio
24/09/2009
159
Sin embargo el uso de un alias para el COUNT(FavCategory.CategoryId) en la sentencia SELECT no es esencial. Usted podra haber logrado los mismos resultados con este SQL, que es, de hecho, el nico que MS Access acepta:
Sin embargo, dar un nombre significativo a la funcin agregada de los resultados hace que el cdigo ms legible.
24/09/2009
160
24/09/2009
161
Adding Results La funcin SUM() aade todos los valores de la expresin que le pasan como argumento, ya sea de una columna o el resultado de un clculo. La sintaxis bsica es la siguiente: SUM(expression_to_be_added_together)
24/09/2009
162
24/09/2009
163
Averaging Results Si desea averiguar la media de una columna o de una expresin en los resultados, usted necesita utilizar la funcin AVG(). Esto funciona de la misma manera que la funcin SUM (), con la diferencia obvia de que obtiene un valor medio.
24/09/2009
164
24/09/2009
165
24/09/2009
166
24/09/2009
167
24/09/2009
168
24/09/2009
169
24/09/2009
170
24/09/2009
171
En un ejemplo anterior, el presidente del club quiso saber cuntos miembros de su lista tienen como favorito la categora de la pelcula. El presidente tambin quera saber la lista ordenada de los ms populares a los menos populares de eleccin de la categora . Sin embargo, ahora el presidente quiere la lista para incluir slo aquellas categoras donde cuatro o ms de sus miembros figuran en sus categoras favoritas. Ejecutar el siguiente SQL para responder a la pregunta del presidente:
24/09/2009
172
24/09/2009
173
Joins Revisited
Recuerde, un inner join se compone de la palabra clave INNER JOIN, que especifica que dos tablas se van a unir. Despus de la palabra clave INNER JOIN, se especifique una clusula, que identifica la condicin que debe cumplir cada tabla. La sintaxis bsica de un inner join es la siguiente: name_of_table_on_left INNER JOIN name_of_table_on_right ON condition
24/09/2009
174
Usted podra utilizar un non-equijoin, por ejemplo, si usted desea una lista de las pelculas puesto en libertad despus del ao de nacimiento de cada uno de los miembros que viven en Golden State. El SQL necesario para este ejemplo es el siguiente (tenga en cuenta que la ejemplo no trabaja en Oracle, como Oracle no es compatible con el funcin YEAR().
24/09/2009
175
24/09/2009
176
Tenga en cuenta que MS Access insiste que se coloque entre parntesis, por lo que usted necesita reescribir el anterior SQL de la siguiente manera:
24/09/2009
177
Vale la pena mencionar que un INNER JOIN en su declaracin no se limita a una sola condicin, que puede contener dos o ms. Por ejemplo, el siguiente SQL tiene dos condiciones en la posicin de la clausula ON.
24/09/2009
178
Cross Joins Una unin cruzada suma todas las filas de todas las tablas que figuran en la unin y se incluyen en los resultados. Puede definirse una unin cruzada de dos maneras. La primera manera de crear una unin cruzada es como se muestra en el siguiente cdigo, donde las tablas Category y Location estn unidas mediante CROSS JOIN:
Primera Forma:
24/09/2009
179
La anterior sintaxis es apoyada por Oracle, MySQL y MS SQL Server, pero no por IBM DB2 o MS Access. Una alternativa para la sintaxis de una unin cruzada no es ms que unirse a la lista todas los tablas, tal y como se muestra aqu:
Segunda Forma:
Prcticamente todas las bases de datos apoyan la segunda forma, por lo que es probablemente la mejor manera para llevar a cabo una unin cruzada. Ambas formas presentan el mismo resultado :
24/09/2009
180
24/09/2009
181
En este captulo se examina cmo puede anidar una consulta dentro de otra. SQL permite que las peticiones en consultas, o subconsultas, que estn dentro del SELECT. Esto puede sonar un poco extrao, pero las subconsultas pueden ser muy tiles. El inconveniente, sin embargo, es que pueden consumir una gran cantidad de procesamiento, disco, memoria y recursos.
A lo largo de este captulo, vers que hay referencias al exterior e interior de las subconsultas. Se muestra a continuacin es un estndar de consulta:
24/09/2009
182
Ejemplo 1 :
24/09/2009
183
Ejemplo 2 :
24/09/2009
184
Ejemplo 3 :
24/09/2009
185
Ejemplo 4 :
24/09/2009
186
Ejemplo 5 :
24/09/2009
187
Ejemplo 6 :
24/09/2009
188
24/09/2009
189
Operators in Subqueries
Revisiting the IN Operator
24/09/2009
190
24/09/2009
191
24/09/2009
192
24/09/2009
193
Continuara
24/09/2009
194
24/09/2009
195
24/09/2009
196
24/09/2009
197
24/09/2009
198
24/09/2009
199
24/09/2009
200
24/09/2009
201
Un procedimiento almacenado es una coleccin con nombre de instrucciones de Transact-SQL que se almacena en el servidor. Los procedimientos almacenados son un mtodo para encapsular tareas repetitivas. Admiten variables declaradas por el usuario, ejecucin condicional y otras caractersticas de programacin muy eficaces. SQL Server admite cinco tipos de procedimientos almacenados: Procedimientos almacenados del sistema (sp_) Almacenados en la base de datos master e identificados mediante el prefijo sp_, los procedimientos almacenados del sistema proporcionan un mtodo efectivo de recuperar informacin de las tablas del sistema. Permiten a los administradores del sistema realizar tareas de administracin de la base de datos que actualizan las tablas del sistema aunque stos no tengan permiso para actualizar las tablas subyacentes directamente. Los procedimientos almacenados del sistema se pueden ejecutar en cualquier base de datos.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 202
Procedimientos almacenados locales Los procedimientos almacenados locales se crean en las bases de datos de los usuarios individuales. Procedimientos almacenados temporales Los procedimientos almacenados temporales pueden ser locales, con nombres que comienzan por un signo de almohadilla (#), o globales, con nombres que comienzan por un signo de almohadilla doble (##). Los procedimientos almacenados temporales locales estn disponibles en la sesin de un nico usuario, mientras que los procedimientos almacenados temporales globales estn disponibles para las sesiones de todos los usuarios. Procedimientos almacenados remotos Los procedimientos almacenados remotos son una caracterstica anterior de SQL Server. Las consultas distribuidas admiten ahora esta funcionalidad.
24/09/2009
203
Procedimientos almacenados extendidos (xp_) Los procedimientos almacenados extendidos se implementan como bibliotecas de vnculos dinmicos (DLL, Dynamic-Link Libraries) que se ejecutan fuera del entorno de SQL Server. Normalmente, se identifican mediante el prefijo xp_. Se ejecutan de forma similar a los procedimientos almacenados. Los procedimientos almacenados en SQL Server son similares a los procedimientos de otros lenguajes de programacin ya que pueden: Contener instrucciones que realizan operaciones en la base de datos; incluso tienen la capacidad de llamar a otros procedimientos almacenados. Aceptar parmetros de entrada. Devolver un valor de estado a un procedimiento almacenado o a un proceso por lotes que realiza la llamada para indicar que se ha ejecutado correctamente o que se ha producido algn error, y la razn del mismo. Devolver varios valores al procedimiento almacenado o al proceso por lotes que realiza la llamada en forma de parmetros de salida.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 204
El procesamiento de un procedimiento almacenado conlleva crearlo y ejecutarlo la primera vez, lo que coloca su plan de consultas en la cach de procedimientos. La cach de procedimientos es un bloque de memoria que contiene los planes de ejecucin de todas las instrucciones de Transact-SQL que se estn ejecutando actualmente. El tamao de la cach de procedimientos flucta dinmicamente de acuerdo con los grados de actividad. La cach de procedimientos se encuentra en el bloque de memoria que es la unidad principal de memoria de SQL Server. Contiene la mayor parte de las estructuras de datos que usan memoria en SQL Server.
24/09/2009
205
Los procedimientos almacenados ofrecen varias ventajas. Pueden: Compartir la lgica de la aplicacin con las restantes aplicaciones, lo que asegura que el acceso y la modificacin de los datos se hace de una forma coherente. Los procedimientos almacenados pueden encapsular la funcionalidad del negocio. Las reglas o directivas empresariales encapsuladas en los procedimientos almacenados se pueden cambiar en una sola ubicacin. Todos los clientes pueden usar los mismos procedimientos almacenados para asegurar que el acceso y modificacin de los datos es coherente. Apartar a los usuarios de la exposicin de los detalles de las tablas de la base de datos. Si un conjunto de procedimientos almacenados permite llevar a cabo todas las funciones de negocio que los usuarios necesitan, los usuarios no tienen que tener acceso a las tablas directamente. Proporcionar mecanismos de seguridad. Los usuarios pueden obtener permiso para ejecutar un procedimiento almacenado incluso si no tienen permiso de acceso a las tablas o vistas a las que hace referencia.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 206
Mejorar el rendimiento. Los procedimientos almacenados implementan muchas tareas como una serie de instrucciones de Transact-SQL. Se puede aplicar lgica condicional a los resultados de las primeras instrucciones de Transact-SQL para determinar cules son las siguientes que deben ejecutarse.
Todas estas instrucciones de Transact-SQL y la lgica condicional pasa a ser parte de un nico plan de ejecucin del servidor.
Reducir el trfico de red. En lugar de enviar cientos de instrucciones de Transact-SQL por la red, los usuarios pueden realizar una operacin compleja mediante el envo de una nica instruccin, lo que reduce el nmero de solicitudes que se pasan entre el cliente y el servidor.
24/09/2009
207
24/09/2009
208
24/09/2009
209
24/09/2009
210
24/09/2009
211
24/09/2009
212
24/09/2009
213
24/09/2009
214
24/09/2009
215
24/09/2009
216
24/09/2009
217
24/09/2009
218
24/09/2009
219
24/09/2009
220
24/09/2009
221
24/09/2009
222
24/09/2009
223
24/09/2009
224
24/09/2009
225
Continuara .. Ejercicio Realice un formulario (VB.Net , C#.Net o Java) y utilice procedimientos almacenados para grabar, modificar, y eliminar.
24/09/2009
226
24/09/2009
227
Microsoft Sql Server 2005 es un producto con muchas novedades comparndolo con su antecesor SQL 2000. Sin duda que uno de sus mayores cambios ha sido la inclusin del CLR dentro del motor de base de datos. Nos concentraremos en algunas de las tantas novedades que nos trae Microsoft SQL 2005 en lo que respecta a Transact-SQL, las cuales sern de mucha utilidad para los desarrolladores de aplicaciones como as tambin para los DBA. Transact SQL (TSQL) es el lenguaje que usamos para escribir : Store Procedures Triggers Querys Etc. Sin dudas que TSQL no dispone de las mismas habilidades y potencia que puede tener un lenguaje como C# o VB.NET. En Sql2005 veremos un cambio significativo en TSQL el cual nos ayudara en nuestro trabajo diario.
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009
24/09/2009
228
Numerando Registros (RowId) En muchas ocasiones es necesario poder obtener una columna con el nmero de registro o tambin poder generar un ranking. Hasta SQL2000 este tipo de operaciones no eran tan simples de realizar y no disponamos de instrucciones directas. En TSQL 2005 disponemos de una serie de instrucciones las cuales nos hacen el trabajo mucho mas simple y eficiente. Veamos de qu se trata ello. Row_Number: Esta nueva funcin de TSQL nos permitir numerar los resultados de una query.
24/09/2009
229
24/09/2009
230
24/09/2009
231
24/09/2009
232
24/09/2009
233
24/09/2009
234
24/09/2009
235
24/09/2009
236
24/09/2009
237
24/09/2009
238
24/09/2009
239
24/09/2009
240
24/09/2009
241
24/09/2009
242
24/09/2009
243
24/09/2009
244
Continuara
24/09/2009
245
24/09/2009
246
24/09/2009
247
PERSISTENCIA EN JAVA
ENCUENTRO 1
SISTEMAS UNSCH
24/09/2009
248
Ahora veremos la forma en que los programas Java puede interactuar con otras bases de datos o cualquier base de datos que se puede acceder usando el Lenguaje de Consulta Estructurado (SQL). En primer lugar voy a presentar las ideas bsicas detrs de bases de datos y la forma en que almacenar datos.
Esto lleva naturalmente en una discusin sobre SQL, el lenguaje que se utiliza con muchas bases de datos relacionales para definir consultas de datos y que es un requisito previo para el acceso a bases de datos en Java.
24/09/2009
249
Entonces usted ver en la Conectividad de bases de datos Java (JDBC), una biblioteca de clases, lo que proporciona una forma estndar para la creacin y el mantenimiento de un programa en Java para la conexin de una base de datos. Una vez que haya una conexin con un base de datos, puede utilizar SQL para acceder y procesar el contenido.
24/09/2009
250
En este primer encuentro, usted tomar un breve recorrido por los conceptos de bases de datos, SQL y JDBC. En lo siguiente entraremos en ms profundidad en las capacidades proporcionadas por JDBC y desarrollar una base de datos de navegacin de solicitud. En este encuentro usted aprender:
Que son las bases de datos La razn de ser del JDBC Cmo escribir un simple programa JDBC Cuales son los elementos clave de la API de JDBC
24/09/2009
251
24/09/2009
252
1.
2.
3.
Acceso a distancia de una base de datos relacional en un servidor, por ejemplo, SQL Server Una base de datos local relacional en su ordenador, por ejemplo, Microsoft Access. Un archivo de texto en su ordenador. Una hoja de clculo.
24/09/2009
253
JDBC es, por definicin, una interfaz a las fuentes de datos relacionales. Si bien es concebible que fuentes no relacional pueden ser accesibles a travs de JDBC, se le concentra en las bases de datos relacionales. Si no ha trabajado antes con bases de datos relacionales, debe todava ser capaz de seguir debatiendo frente a esto. La estructura de una base de datos relacional es bastante lgico y fcil de aprender, y aunque no pueda proporcionarle una completa informacin sobre l, aqu voy a cubrir una cantidad suficiente de los elementos bsicos para hacerlo comprensible, incluso si nunca has trabajado con bases de datos antes.
24/09/2009
254
La base de datos de Java Connectivity (JDBC), provee una biblioteca que proporciona los medios para que pueda ejecutar sentencias SQL dentro de un programa Java, para acceder y operar sobre una base de datos relacional. JDBC esta basada en la interfaz de programacin de aplicaciones (API) para acceso a bases de datos y est destinado a ser un estndar para que los desarrolladores de Java y base de datos de los proveedores pueden adherirse. La biblioteca esta en el paquete java.sql. Se trata de un conjunto de clases e interfaces que proporciona un API uniforme para el acceso a una amplia gama de bases de datos.
Las operaciones que desee realizar sobre una base de datos relacional se expresan en un idioma que esta diseado especficamente para este fin, ms comnmente conocida como SQL.
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009
24/09/2009
255
SQL no es como un lenguaje de programacin convencional, como Java. SQL es un lenguaje declarativo, lo que significa que SQL le dice al servidor de base de datos lo que quieres hacer, pero no cmo debe ser el hecho hasta el servidor. Cada comando SQL es analizada por el servidor de bases de datos, y la operacin que describe es llevada a cabo por una pieza de software que se suele hacer referencia como el motor base de datos .
Un motor de base de datos se asocia con una particular puesta en marcha de una base de datos relacional, aunque no necesariamente es nica. Diferentes implementaciones de bases de datos comerciales podrn utilizar un motor comn de base de datos.
24/09/2009
256
Tablas
24/09/2009
257
Tablas
24/09/2009
258
Tablas
24/09/2009
259
Introduccin de SQL
Es un Lenguaje de consulta estructurado (SQL), aceptada internacionalmente como la norma oficial para el acceso a bases de datos. Una de las principales razones para la aceptacin de SQL como el lenguaje de consultas relacionales es la arquitectura cliente / servidor que se inici a finales del decenio de 1980.
24/09/2009
260
SQL es diferente de otros lenguajes de programacin que usted puede estar familiarizado con todo en el sentido de que es declarativo, no de procedimiento. En otras palabras, usted no usa SQL para definir procesos complejos, sino usa SQL para cuestin de comandos que definen y manipulan los datos. La primera cosa que usted vera de SQL es que es muy legible. La forma en que cada consulta se ha estructurado se lee como una oracin en Ingls. La sintaxis es fcil de aprender, y las construcciones y los conceptos son muy fcil de entender. Veamos el ejemplo de una base de datos que has visto anteriormente la base de datos technical_library
24/09/2009
261
Sentencias SQL
La mayora de sentencias SQL y, desde luego, los que usted va a utilizar, caen claramente en dos grupos: Lenguaje de definicin de datos (DDL), declaraciones que se utilizan para describir las tablas y los datos que contienen.
Lenguaje de manipulacin de datos (DML), declaraciones que se utilizan para operar sobre los datos de la base de datos.
DML puede dividirse en dos grupos: SELECT-Las declaraciones que devuelven un conjunto de resultados. Todo lo dems-Las declaraciones que no devuelven un conjunto de resultados.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 262
Para crear las tablas en el ejemplo, usted podra utilizar DDL, que define una sintaxis de comandos tales como CREATE TABLE y ALTER TABLE. Usted podra utilizar las declaraciones DDL para definir la estructura de la base de datos. Para llevar a cabo operaciones en la base de datos de aadir filas a una tabla o la consulta de los datos, por ejemplo, usted podra utilizar las declaraciones DML.
24/09/2009
263
24/09/2009
264
El paquete JDBC La biblioteca JDBC fue diseado como una interfaz para ejecutar sentencias SQL, y no como un compromiso de alto nivel capa de abstraccin para el acceso a los datos. Adems permite en gran escala escribir aplicaciones para la interfaz JDBC sin preocuparse demasiado sobre la base de datos que se desplegar con la solicitud. Una aplicacin JDBC est bien aislado de las caractersticas particulares del sistema de base de datos que utiliza y, por tanto, no tiene que ser reingeniera de bases de datos especficas.
24/09/2009
265
Desde el punto de vista del usuario, una aplicacin Java que trabaja con una base de datos se muestra conceptualmente como:
24/09/2009
266
24/09/2009
267
URL y JDBC
Una hace referencia a un URL de recursos electrnicos, tales como una de la pagina de la World Wide Web o un archivo en un servidor de FTP, que identifica de forma exclusiva ese recurso. URL desempear un papel central en el desarrollo de aplicaciones de red en Java. JDBC utiliza URLs para identificar los lugares de ambos conductores y fuentes de datos. URL JDBC tienen el siguiente formato: JDBC: Subprotocolo: data_source_identifier
El rgimen JDBC indica que la URL se refiere a una fuente de datos JDBC. El sub-protocolo identifica el Driver JDBC para su uso. Por ejemplo, el puente JDBC-ODBC, utiliza el conductor identificador ODBC. El driver JDBC dicta el formato de la fuente de datos de identificacin. En el ejemplo anterior, el puente JDBC-ODBC simplemente utiliza el nombre de la fuente de datos ODBC . Para utilizar el controlador ODBC con la fuente de datos ODBC technical_library, usted podra crear una URL con el siguiente formato: JDBC: ODBC: technical_library
Componentes Conceptuales
Carga el driver de la base de datos y gestiona las conexiones entre la aplicacin y el conductor Traduce llamadas a la API, en las operaciones de una determinada fuente de datos Una sesin entre una aplicacin y una base de datos
24/09/2009
269
JDBC Bsico Asumiendo que han seguido las instrucciones dadas al comienzo de la presentacin, y tienen la necesaria base de datos de ejemplo y el controlador de la base de datos instalado en su mquina, usted est listo para ver una base JDBC ,programa que involucra los siguientes pasos: 1.Importar las clases necesarias. 2. Cargar el driver JDBC. 3. Identificar el origen de datos. 4. Asignar un objeto de conexin. 5. Asignar una declaracin objeto. 6. Ejecuta una consulta mediante la declaracin de objeto. 7. Recuperar datos de la devolucin del objeto ResultSet. 8. Cerrar el ResultSet. 9. Cerrar la Declaracin objeto. 10. Cerrar el objeto Connection. A lo largo de esta presentacin usted acumulara suficiente comprensin de JDBC para aplicar los elementos esenciales de dicho programa.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 270
La arquitectura de JDBC est basado en una coleccin de interfaces Java y las clases que juntos le permiten conectarse a fuentes de datos, para crear y ejecutar sentencias SQL, y para recuperar y modificar datos en un base de datos. Estas operaciones se ilustra en la Figura.
24/09/2009
271
En todos los ejemplos que usted observara en la presentacin, utilizara el puente JDBC-ODBC , sun.jdbc.odbc.JdbcOdbcDriver- conductor -para acceder al MS Access technical_library.mdb base de datos que he asumido ha sido creado con un Microsoft Access controlador ODBC como se describe en la seccin anterior.
Veamos como podemos conectar a una base de datos Ms Access con JDBC-ODBC
24/09/2009
272
package jdbc_odbc;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class MakingTheConnection { public static void main(String[] args) { // Load the driver try { // Load the driver class Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // Define the data source for the driver
String sourceURL = "jdbc:odbc:HJP"; // Create a connection through the DriverManager Connection databaseConnection = DriverManager.getConnection(sourceURL); System.out.println("Connection is: "+databaseConnection); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe); } catch(SQLException sqle) { System.err.println(sqle); } } }
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 273
Usando el ResultSet de referencia, se puede recuperar el valor de cualquier columna para la fila actual (tal como se especifica por el cursor) por su nombre o por posicin. Tambin puede determinar la informacin sobre las columnas, por ejemplo como el nmero de columnas devueltas o los tipos de datos de las columnas. La interfaz ResultSet declara los siguientes mtodos bsicos para recuperar una columna de datos para la fila actual, los tipos utilizados en Java son:
24/09/2009
274
Tenga en cuenta que esta lista no es completa, pero no es probable que necesite saber acerca de los dems. Para una lista completa de los mtodos disponibles, eche un vistazo a la documentacin para la interfaz ResultSet. All estn sobrecargadas versiones de cada uno de los mtodos se muestra en el cuadro anterior que ofrecen dos formas de identificacin de la columna que contiene los datos. La columna se puede seleccionar con el nombre de la columna SQL, como una cadena o pasando un argumento ndice de tipo int, donde la primera columna tiene el valor ndice 1. Tenga en cuenta que los nombres de columna no se distingue entre maysculas y minsculas para que "FirstName" es el mismo como firstName".
24/09/2009
275
La mayora de los mtodos bsicos de acceso a datos son muy flexibles en la conversin de tipos de datos SQL para tipos de datos Java. Por ejemplo, si usa getInt() en un campo de tipo CHAR, el mtodo se tratar de analizar los personajes suponiendo que se especifico un nmero entero. Del mismo modo, se puede leer tipos numricos de SQL usando la getString().
Con todos estos mtodos, la ausencia de un valor, lo cual es un NULL SQL, se devuelve, ya sea como el equivalente de cero, o como nulo, segn el objeto de referencia devuelto. As, un campo booleano NULL devolver falso, y una campo numrico NULL devolver 0. Si accede a una base de datos y se produce error cuando ejecuta un getXXX() para un resultset, una excepcin de tipo SQLException se lanzar.
24/09/2009
276
La API de JDBC proporciona el acceso a los metadatos, no slo para la conexin de objeto, sino tambin para la ResultSet objeto. La API de JDBC proporciona un objeto ResultSetMetaData que le permite mirar los datos detrs del objeto ResultSet. Si piensa en la prestacin de servicios de navegacin interactiva en su aplicaciones JDBC, usted encontrar esta especialmente til.
En conjunto de estas clases e interfaces constituyen la mayor parte de los componentes JDBC. Vamos a poner ahora en prctica con un ejemplo sencillo.
24/09/2009
277
package JDBC_CONEXION; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.sql.ResultSet; public class MakingAStatement { public static void main(String[] args) { // Load the driver try { // Load the driver class Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // This defines the data source for the driver String sourceURL = new String("jdbc:odbc:HJP"); //Crear conexin a travs de la DriverManager Connection databaseConnection =DriverManager.getConnection(sourceURL); Statement statement = databaseConnection.createStatement(); ResultSet authorNames = statement.executeQuery("SELECT lastname, firstname FROM authors"); // Salida de datos del resultset while(authorNames.next()) { System.out.println(authorNames.getString("lastname")+" "+ authorNames.getString("firstname")); } }catch(ClassNotFoundException cnfe) { System.err.println(cnfe); }catch(SQLException sqle) { System.err.println(sqle); } } } Hubner Janampa Patilla - Administracin
24/09/2009
278
24/09/2009
279
Se especifica que el periodo de tiempo no predeterminado puede ser til para aplicaciones de que estn teniendo dificultades para la conexin a un servidor de bases de datos remotas. Por ejemplo, si su aplicacin est intentando conectarse con un servidor muy ocupado, la solicitud podra parecer que han colgado. Puede decirle al DriverManager el fracaso del intento de conexin cuando especificamos un perodo de tiempo. El fragmento de cdigo a continuacin le dice al DriverManager a fracasar el intento de acceso despus de 60 segundos:
package jdbc_expire; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class jdbc_expire { public static void main(String[] args) { String driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; String sourceURL = "jdbc:odbc:technical_library"; try { Class.forName(driverName); DriverManager.setLoginTimeout(60); // fail after 60 seconds Connection databaseConnection = DriverManager.getConnection(sourceURL); } catch(ClassNotFoundException cnfe) { System.err.println("Error loading " + driverName); } catch(SQLException sqle) { System.err.println(sqle); } }}
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 280
Cmo funciona? Una vez que la conexin ha sido establecida por la llamada del mtodo getConnection(), el siguiente paso es crear la declaracin de un objeto que le permite ejecutar una sentencia SQL y recuperar los resultados. Para crear una declaracin de objeto, simplemente llame al mtodo createStatement() del objeto de conexin. Una vez que haya creado la declaracin de un objeto para ejecutar una consulta SQL contra la base de datos conectada, pase un objeto String como argumento para el mtodo executeQuery(). El executeQuery() devuelve un objeto que implementa la interfaz ResultSet. Como su nombre implica, la interfaz ResultSet le permite obtener la informacin de que fue recuperado por la consulta. T puedes pensar en la interfaz ResultSet como un proporcionador de filas, o como una tabla virtual de resultados. El ResultSet proporciona interiormente un cursor o puntero lgico para hacer un seguimiento de su fila actual. En un ResultSet lo primero que regresa es el cursor que se coloca justo antes de la primera fila de datos. Este mecanismo se ilustra en la Figura.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 281
24/09/2009
282
Obtener los metadatos de un Resultset El mtodo getMetaData() para un objeto ResultSet devuelve una referencia a un objeto de tipo java.sql.ResultSetMetaData que encapsula los metadatos para el resultset. La interfaz ResultSetMetaData declara mtodos que le permiten obtener los elementos de los metadatos para el resultset. El getColumnCount() devuelve el nmero de columnas en el resultset como un valor de tipo int. Para cada columna, se puede obtener el nombre de la columna y el tipo de columna llamando a los mtodos getColumnName() y getColumnType() respectivamente. En ambos casos, especificar la columna por su valor ndice. El nombre de la columna se devuelve como un objeto String, y el tipo de columna se devuelve como un valor de tipo int que identifica el tipo SQL. Los tipos de clase en el paquete publico java.sql define los campos de tipo int que identifica los tipos SQL, y los nombres de esos miembros de la clase de datos son los mismos que los tipos que SQL representa como CHAR, VARCHAR, DOBLE, INT, TIME, y as sucesivamente.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 283
De este modo, se puede enumerar los nombres de las columnas en un resultset que eran de tipo CHAR con el siguiente cdigo:
Usted podra ver el contenido del valor de los datos de cada fila de un objeto ResultSet que son del tipo SQL CHAR con el siguiente cdigo:
24/09/2009
284
Tambin puede obtener el nombre del tipo de una columna como una cadena llamando a la getColumnTypeName(). Otro mtodo muy til es getColumnDisplaySize(), que devuelve el importe mximo del nmero de caracteres necesarios para visualizar los datos almacenados en la columna. Pasar el nmero de ndice de la columna que usted est interesado en como argumento. El regreso el valor es de tipo INT. Usted puede utilizar este formato para ayudar a la salida de la columna de datos. Toda una gama de otros mtodos de metadatos suministrados por un resultset encontrar en la documentacin para la interfaz ResultSetMetaData.
Aqu hay una lista de unos mtodos ms que a usted le puede resultar muy til-que todos ellos requieren un argumento que es el numero de columna de tipo int:
24/09/2009
285
Lista de mtodos
24/09/2009
286
EJEMPLO PRACTICO
SISTEMAS
UNSCH
24/09/2009
287
Tres formas de recorrer desde Java contra la base de datos mediante el objeto ResulSet y ResultSetMetaData
24/09/2009
289
package javaapplication26;
import java.sql.Connection; import java.sql.Statement; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class EssentialJDBC { Connection connection; Statement statement; String sourceURL = "jdbc:odbc:technical_library"; String queryIDAndName = "SELECT authid, lastname, firstname FROM authors"; String queryWildcard = "SELECT * FROM authors"; // Select all columns
24/09/2009
290
public static void main (String[] args) { EssentialJDBC SQLExample = new EssentialJDBC(); // Create application object SQLExample.getResultsByColumnName(); SQLExample.getResultsByColumnPosition(); SQLExample.getAllColumns(); SQLExample.closeConnection(); } public EssentialJDBC() { // Constructor to establish the connection and create a Statement object... try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); connection = DriverManager.getConnection(sourceURL); statement = connection.createStatement(); } catch(SQLException sqle) { System.err.println("Error creating connection"); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe.toString()); } }
24/09/2009
291
void getResultsByColumnName() { // Execute wildcard query and output selected columns... try { ResultSet authorResults = statement.executeQuery(queryWildcard); int row = 0; while(authorResults.next()) { System.out.println("Row" + (++row) + ") "+ authorResults.getString("authid")+ " " + authorResults.getString("lastname")+ " , "+ authorResults.getString("firstname")); } authorResults.close(); } catch (SQLException sqle) { System.err.println ("\nSQLException-------------------\n"); System.err.println ("SQLState: "+ sqle.getSQLState()); System.err.println ("Message : " + sqle.getMessage()); } }
24/09/2009
292
void getResultsByColumnPosition() { // Execute ID and name query and output results... try { ResultSet authorResults = statement.executeQuery(queryIDAndName); int row = 0; while (authorResults.next()) { System.out.print("\nRow " + (++row) + ") "); for(int i = 1 ; i<=3 ; i++) { System.out.print((i>1?", ":" ")+authorResults.getString(i)); } } authorResults.close(); // Close the resultset } catch (SQLException ex) { System.err.println("\nSQLException-------------------\n" ); System.err.println("SQLState: " + ex.getSQLState()); System.err.println("Message : " + ex.getMessage()); } }
24/09/2009
293
void getAllColumns() { // Execute wildcard query and output all columns... try { ResultSet authorResults = statement.executeQuery(queryWildcard); ResultSetMetaData metadata = authorResults.getMetaData(); int columns = metadata.getColumnCount(); // Column count int row = 0; while (authorResults.next()) { System.out.print("\nRow " + (++row) + ") "); for(int i = 1 ; i<=columns ; i++) { System.out.print((i>1?", ":" ")+authorResults.getString(i)); } } authorResults.close(); // Close the resultset } catch (SQLException ex) { System.err.println("\nSQLException-------------------\n"); System.err.println("SQLState: " + ex.getSQLState()); System.err.println("Message : " + ex.getMessage()); } }
24/09/2009
294
// Close the connection void closeConnection() { if(connection != null) { try { connection.close(); connection = null; } catch (SQLException ex) { System.out.println("\nSQLException-------------------\n"); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("Message : "+ ex.getMessage()); } } }
24/09/2009
295
En primer lugar se definir un esquema de la clase StatementTest y sus estados de sus miembros. En el mtodo main () se ejemplifica el objeto StatementTest y luego llamar a los mtodos doStatement () y doPreparedStatement () para ese objeto:
24/09/2009
296
package javaapplication27;
import java.sql.Connection; import java.sql.Statement; import java.sql.PreparedStatement; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class StatementTest { Connection databaseConnection; // Connection to the database String driverName; // Database driver name String sourceURL; // Database location public static void main(String[] args) { try { StatementTest SQLExample = new StatementTest(); SQLExample.doStatement(); SQLExample.doPreparedStatement(); } catch(SQLException sqle) { System.err.println("SQL Exception: " + sqle); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe.toString()); } }
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 297
public StatementTest() throws SQLException, ClassNotFoundException { driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; sourceURL = "jdbc:odbc:technical_library"; Class.forName (driverName); databaseConnection = DriverManager.getConnection(sourceURL); } public void doStatement() throws SQLException { Statement myStatement = databaseConnection.createStatement(); ResultSet myResults = myStatement.executeQuery( "SELECT authid, lastname, firstname FROM authors ORDER BY authid"); showResults(myResults); } public void doPreparedStatement() throws SQLException { PreparedStatement myStatement = databaseConnection.prepareStatement( "SELECT authid, lastname, firstname FROM authors ORDER BY authid"); ResultSet myResults = myStatement.executeQuery(); showResults(myResults); }
24/09/2009
298
public void showResults(ResultSet myResults) throws SQLException { // Retrieve ResultSetMetaData object from ResultSet ResultSetMetaData myResultMetadata = myResults.getMetaData(); // How many columns were returned? (Cuntas columnas fueron devueltos) int numColumns = myResultMetadata.getColumnCount(); System.out.println(" ---------------------Query Results-------------------------"); // Loop through the ResultSet and get data (Bucle a travs del ResultSet y obtener datos) while(myResults.next()) { System.out.printf("%-5d", myResults.getInt(1)); // 1st Column only for(int column = 2; column <= numColumns; column++) { System.out.print(myResults.getString(column)+" "); } System.out.print("\n"); } System.out.println("\n\n-----------Query Metadata----------------"); System.out.println("ResultSet contains " + numColumns + " columns"); for (int column = 1; column <= numColumns; column++) { System.out.println("\nColumn "+ column); System.out.println("column : " + myResultMetadata.getColumnName(column)); // Print the column name System.out.println(" label : " + myResultMetadata.getColumnLabel(column)); // Print the label name System.out.println(" display width : " + myResultMetadata.getColumnDisplaySize(column) +"characters"); // Print the columns display size System.out.println(" data type : " + myResultMetadata.getColumnTypeName(column)); // Print the column type }}}
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 299
Proyecto de Aplicacin
package jdbc_interactivo;
import java.awt.BorderLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JTextArea; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JTable; import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.SQLException;
public class InteractiveSQL extends JFrame implements ActionListener { public static void main(String[] args) { // Set default values for the command line args String user = "guest"; String password = "guest"; String url = "jdbc:odbc:technical_library"; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; // Up to 4 arguments in the sequence database url,driver url, user ID, password switch(args.length) { case 4: // Start here for four arguments password = args[3]; // Fall through to the next case case 3: // Start here for three arguments user = args[2]; // Fall through to the next case case 2: // Start here for two arguments driver = args[1]; // Fall through to the next case case 1: // Start here for one argument url = args[0]; } InteractiveSQL theApp = new InteractiveSQL(driver, url, user, password); }
24/09/2009
301
public InteractiveSQL(String driver, String url, String user , String password) { super("InteractiveSQL"); // Call base constructor setBounds(0, 0, 400, 300); // Set window bounds setDefaultCloseOperation(DISPOSE_ON_CLOSE); // Close window operation addWindowListener(new WindowAdapter() { // Listener for window close // Handler for window closing event public void windowClosing(WindowEvent e) { dispose(); // Release the window resources -Suelte la ventana de recursos System.exit(0); // End the application } } ); // Add the input for SQL statements at the top command.setToolTipText("Key SQL commmand and press Enter"); getContentPane().add(command, BorderLayout.NORTH); // Add the status reporting area at the bottom status.setLineWrap(true); status.setWrapStyleWord(true); getContentPane().add(status, BorderLayout.SOUTH); // Create the menubar from the menu items JMenu fileMenu = new JMenu("File"); // Create File menu fileMenu.setMnemonic('F'); // Create shortcut fileMenu.add(clearQueryItem); // Add clear query item fileMenu.add(exitItem); // Add exit item menuBar.add(fileMenu); // Add menu to the menubar setJMenuBar(menuBar); // Add menubar to the window // Add listeners for text field and menu items command.addActionListener(this); clearQueryItem.addActionListener(this); exitItem.addActionListener(this);
24/09/2009
302
// Establish a database connection and set up the table try { Class.forName(driver); // Load the driver connection = DriverManager.getConnection(url, user, password); statement = connection.createStatement(); model = new ResultsModel(); // Create a table model JTable table = new JTable(model); // Create a table from the model table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // Use scrollbars resultsPane = new JScrollPane(table); // Create scrollpane for table getContentPane().add(resultsPane, BorderLayout.CENTER); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe); // Driver not found } catch(SQLException sqle) { System.err.println(sqle); // error connection to database } pack(); setVisible(true); } // Handles action events for menu items and the text field //Tiradores de accin para eventos de los elementos del men y el campo de texto public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if(source == command) { // Enter key for text field input executeSQL(); } else if(source == clearQueryItem) { // Clear query menu item command.setText(""); // Clear SQL entry } else if(source == exitItem) { // Exit menu item dispose(); // Release the window resources System.exit(0); // End the application } }
24/09/2009
303
// Executes an SQL command entered in the text field public void executeSQL() { String query = command.getText(); // Get the SQL statement if(query == null||query.length() == 0) { // If there's nothing we are done return; } try { model.setResultSet(statement.executeQuery(query)); status.setText("Resultset has " + model.getRowCount() + " rows."); } catch (SQLException sqle) { status.setText(sqle.getMessage()); // Display error message } } JTextField command = new JTextField(); // Input area for SQL JTextArea status = new JTextArea(3,1); // Output area for status and errors JScrollPane resultsPane; JMenuBar menuBar = new JMenuBar(); // The menu bar JMenuItem clearQueryItem = new JMenuItem("Clear query"); // Clear SQL item JMenuItem exitItem = new JMenuItem("Exit"); // Exit item Connection connection; Statement statement; ResultsModel model; } // Connection to the database // Statement object for queries // Table model for resultset
24/09/2009
304
package jdbc_interactivo; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import javax.swing.table.AbstractTableModel; import java.util.Vector; class ResultsModel extends AbstractTableModel { public void setResultSet(ResultSet results) { try { ResultSetMetaData metadata = results.getMetaData();
int columns = metadata.getColumnCount(); // Get number of columns columnNames = new String[columns]; // Array to hold names // Get the column names for(int i = 0; i < columns; i++) { columnNames[i] = metadata.getColumnLabel(i+1); } // Get all rows dataRows.clear(); // Empty vector to store the data String[] rowData; // Stores one row while(results.next()) { // For each row... rowData = new String[columns]; // create array to hold the data for(int i = 0; i < columns; i++) { // For each column rowData[i] = results.getString(i+1); // retrieve the data item } dataRows.addElement(rowData); // Store the row in the vector } fireTableChanged(null); // Signal the table there is new model data
} catch (SQLException sqle) { System.err.println(sqle); } } Hubner Janampa Patilla - Administracin de Bases de Datos - 2009
24/09/2009
305
24/09/2009
306
24/09/2009
307
Matisse - Nuevo constructor de GUI para Netbeans El proyecto Netbeans anunci hace poco la prxima integracin de un nuevo creador de GUI en su plataforma. Este siempre ha sido un punto destacado en el IDE Netbeans frente a otros IDEs como Eclipse. Con este nuevo mdulo se simplifica todava ms la tarea de construccin del GUI de una aplicacin. En lugar de estar basado en la seleccin y ajuste por parte del desarrollador de un layout manager Swing, Matisse permite la creacin en un modo libre de la interface y el propio entorno infiere el layout manager y el resto de caractersticas del mismo, como reglas de redimensionado, espaciado, etc. Ahora est disponible una versin preview funcional de Matisse para su evaluacin. Ms informacin: Pgina de Matisse (http://www.netbeans.org/files/documents/4/475/matisse.html) Demo (Flash)
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 308
El JDBC en accin
24/09/2009
309
El JDBC en accin
En esta clase voy a extender sobre la base de datos de Java Connectivity (JDBC) y la interfaz de programa de aplicacin (API). En esta presentacin usted va a obtener ms informacin acerca de: Mapeo relacional de datos a objetos Java. El mapeo entre SQL y tipos de datos Java. Cmo limitar los datos creada en un resultset Cmo limitar el tiempo dedicado a la ejecucin de una consulta
24/09/2009
310
Cmo utilizar un objeto PreparedStatement para crear una sentencia SQL parametrizada. Cmo se puede ejecutar la actualizacin de bases de datos y borrar sus operaciones en programas Java Cmo puede obtener ms informacin de los objetos SQLException. Qu es un objeto SQLWarning y lo que puedes hacer con ellos?
24/09/2009
311
Tipos de datos y JDBC ResultSet proporciona una serie de mtodos para la recuperacin de diferentes tipos de datos.
Para usar estos de manera eficaz, usted necesita ver a los tipos de datos SQL y comprender la forma en que java mapea los datos de los distintos tipos en su programa.
Mapeo entre Java y tipos de datos SQL El estndar SQL-92 define un conjunto de tipos de datos que no coinciden uno por uno con los que estn en Java. Ya que al escribir aplicaciones que se mueven los datos de SQL para Java y viceversa , tendr que tener en cuenta cmo JDBC realiza la cartografa. Es decir, lo que necesita saber es el tipo de dato Java que usted necesita para representar un determinado tipo de dato de SQL, y viceversa.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 312
24/09/2009
313
24/09/2009
314
24/09/2009
315
24/09/2009
316
Las Bases de datos relacionales, por otra parte, trabaja en el modelo de datos. Como has visto, las bases de datos relacionales almacenar informacin utilizando formularios normalizados, donde los objetos conceptuales como las facturas y los clientes pueden ser descompuestos en una serie de cuadros. Por lo tanto,
cmo hacer frente al problema de mapeo de objetos a los modelos de datos relacionales?
A veces hay una relacin directa entre las columnas en una tabla y las variables miembro en un objeto. En ese caso, la cartografa consiste simplemente de hacer coincidir los tipos de datos de la base de datos con los de Java.
24/09/2009
317
Una simple cartografa de los tipos SQL a objetos Java de la tabla authors, de la base de datos de ejemplo es un buen ejemplo de una simple cartografa. Para recapitular, este tabla tiene la siguiente definicin:
24/09/2009
319
Vamos a definir una clase Java para encapsular un autor. Tome una mirada hacia atrs en la tabla que se muestro cmo un Mapa de los tipos SQL a los tipos de datos Java. Sobre la base de esas asignaciones, se puede definir las variables miembro de una clase authors, y aadir un constructor, mtodos miembros de acceso, y un toString ():
24/09/2009
320
Cmo funciona? En todo este ejemplo usted debe estar muy familiarizado, pero hay un par de cosas nuevas que necesito cubrir. Tenga en cuenta en primer lugar, que hay un paso adicional despus de los datos se lee que crea el autor objeto de llamar su constructor con esos datos. Asimismo, en el bucle while, ya que cada fila se lee desde el ResultSet, la aplicacin usa los apropiados metodos getXXX() del ResultSet, cuyo objetivo es realizar la cartografa de SQL a Tipos de datos Java. En cada una de estas llamadas al mtodo, el argumento es el valor del ndice para seleccionar la columna. Dado que la consulta selecciona las columnas por su nombre, las columnas en el resultset ser en la misma secuencia como los nombres de columna en la consulta SQL. Para mostrar los datos de cada objeto Autor, simplemente llame a System.out.println() y pasar la referencia del objeto Autor a la misma. As, se invocan los mtodos toString() para el objeto.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 321
package jdbc_accion;
public class Author { public Author(int authid, String lastname, String firstname, String address[], String city, String state, String postcode, String country, String phone, String fax, String email) { this.authid = authid; this.lastname = lastname; this.firstname = firstname; this.address = address; this.city = city; this.state = state; this.postcode = postcode; this.country = country; this.phone = phone; this.fax = fax; this.email = email; }
24/09/2009
322
public int getId() { return authid; } public String getLastName() { return lastname; } public String getFirstName() { return firstname; } public String[] getAddress() { return address; } public String getCity() { return city; } public String getState() { return state; } public String getCountry() { return country; }
24/09/2009
323
public String getPostCode() { return postcode; } public String getPhone() { return phone; } public String getFax() { return fax; } public String getEmail() { return email; } public String toString() { return new String("author ID: " + Integer.toString(authid) + "\nname : " + lastname + "," + firstname +"\naddress : " + address[0] + "\n : " + address[1] +" \n : " + city + " " + state + "\n : " + postcode + " " + country +"\nphone : " + phone + "\nfax : " + fax +"\nemail : " + email); } int authid; String lastname; String firstname; String address[]; String city; String state; String postcode; String country; String phone; String fax; String email; } Hubner Janampa Patilla - Administracin 24/09/2009 324 de Bases de Datos - 2009
package jdbc_accion;
import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLException;
public class TrySimpleMapping { public static void main (String[] args) { TrySimpleMapping SQLtoJavaExample; try { SQLtoJavaExample = new TrySimpleMapping(); SQLtoJavaExample.listAuthors(); } catch(SQLException sqle) { System.err.println(sqle); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe); } } public TrySimpleMapping() throws SQLException, ClassNotFoundException { Class.forName (driverName); connection = DriverManager.getConnection(sourceURL, user, password); }
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 325
public void listAuthors() throws SQLException { Author author = null; String query = "SELECT authid, lastname, firstname, address1,"+ "address2, city, state_prov, postcode, country,"+ "phone, fax, email FROM authors"; Statement statement = connection.createStatement(); ResultSet authors = statement.executeQuery(query); while(authors.next()) { int id = authors.getInt(1); String lastname = authors.getString(2); String firstname = authors.getString(3); String[] address = { authors.getString(4), authors.getString(5)}; String city = authors.getString(6); String state = authors.getString(7); String postcode = authors.getString(8); String country = authors.getString(9); String phone = authors.getString(10); String fax = authors.getString(11); String email = authors.getString(12); author = new Author(id, lastname, firstname, address, city, state, postcode,country, phone, fax, email); System.out.println("\n" + author); } authors.close(); connection.close(); } Hubner Janampa Patilla - Administracin de Bases de Datos - 2009
24/09/2009
326
Connection connection; String driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; String sourceURL = "jdbc:odbc:technical_library"; String user = "guest"; String password = "guest"; }
En este ejemplo se utiliza el JDBC-ODBC Bridge conductor con una fuente de datos que requieren un nombre de usuario y contrasea. Si usted necesita un nombre de usuario y contrasea diferente para acceder a esa fuente de datos, basta con modificar el cdigo en el constructor TrySimpleMapping, y utilizar el controlador apropiado, la URL y el mtodo getConnection() del DriverManager.
24/09/2009
327
El uso de un objeto PreparedStatement Vamos a poner una declaracin preparada en accin a la hora que pasar por la mecnica del contexto prctico visto. Use el cdigo de ejemplo que ejecuta el mismo SQL SELECT utilizando tanto el estado y los objetos PreparedStatement. Para cada uno de estos, los resultados se mostrarn junto con los metadatos.
24/09/2009
328
package javaapplication27; import java.sql.Connection; import java.sql.Statement; import java.sql.PreparedStatement; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class StatementTest { Connection databaseConnection; // Connection to the database String driverName; // Database driver name String sourceURL; // Database location public static void main(String[] args) { try { StatementTest SQLExample = new StatementTest(); SQLExample.doStatement(); SQLExample.doPreparedStatement(); } catch(SQLException sqle) { System.err.println("SQL Exception: " + sqle); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe.toString()); }}
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 329
public StatementTest() throws SQLException, ClassNotFoundException { driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; sourceURL = "jdbc:odbc:technical_library"; Class.forName (driverName); databaseConnection = DriverManager.getConnection(sourceURL); } public void doStatement() throws SQLException { Statement myStatement = databaseConnection.createStatement(); ResultSet myResults = myStatement.executeQuery( "SELECT authid, lastname, firstname FROM authors ORDER BY authid"); showResults(myResults); } public void doPreparedStatement() throws SQLException { PreparedStatement myStatement = databaseConnection.prepareStatement( "SELECT authid, lastname, firstname FROM authors ORDER BY authid"); ResultSet myResults = myStatement.executeQuery(); showResults(myResults); }
24/09/2009
330
Statement versus PreparedStatement Habr momentos en que la eleccin entre la utilizacin de Statement o un objeto PreparedStatement puede no ser del todo clara. Los objetos PreparedStatement son grandes cuando: Es necesario ejecutar la misma declaracin varias veces, con la necesidad de cambiar slo valores especficos. La compaa est trabajando con grandes trozos de datos que hacen la concatenacin difcil de manejar. Usted est trabajando con un gran nmero de parmetros en la sentencia SQL que hacen que las cadenas de concatenacin sean difciles de manejar. Por el contrario, los objetos Statement funcionan bien cuando se tiene las declaraciones simples y, por supuesto, usted no tiene opcin si su driver JDBC no es compatible con la interfaz PreparedStatement.
24/09/2009
332
La interfaz PreparedStatement
Anteriormente en este apartado, usted vio que usted puede construir cadenas de SQL sobre la marcha y ejecutar con executeQuery() .
Esa es una manera de introducir los parmetros en una sentencia SQL, pero no es la nica manera, ni es necesariamente el ms conveniente. La Interfaz PreparedStatement provee de un mecanismo alternativo que le permite definir una sentencia SQL con posicionadores de argumentos. Los Posicionadores son fichas que aparecen en la sentencia S Q L que se sustituyen. Este suele ser mucho ms fcil que la construccin de una declaracin SQL con valores especficos y luego concatenar cadenas.
Al igual que una declaracin de un objeto, se crea un objeto PreparedStatement llamando a un mtodo del objeto Conexin.
24/09/2009
333
En lugar de llamar al mtodo createStatement() del objeto conexin, llamar a la prepareStatement() si desea crear un objeto PreparedStatement. Mientras puede utilizar una declaracin objeto de ejecutar cualquier nmero de sentencias SQL, el objeto PreparedStatement ejecuta slo una sentencia SQL predefinida que tiene definida para los marcadores de posicin. En el argumento se especifica la declaracin SQL con cada marcador de posicin por un valor representado por un carcter ? .
24/09/2009
334
Usted debe fijar valores para todos los marcadores de posicin que aparecen en la declaracin de los encapsulados updateLastName de referencia antes de la declaracin puede ser ejecutado. Usted oferta el valor de cada marcador de posicin llamando a uno de los mtodos setXXX() de la interfaz PreparedStatement:
Estos mtodos aceptan como mnimo una posicin de argumento que identifica marcador de posicin al que usted se refiere y para cada valor de argumento es sustituido por el marcador de posicin. Los marcadores de posicin son indexadas en secuencia de izquierda a derecha empezando por 1, por lo que la referencia de posicin del extremo izquierdo tiene ndice 1, y cualquier marcadores de posicin siguiente con el ndice de valor de 2, 3, y as sucesivamente.
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009
24/09/2009
335
El mtodo que usted llama para un marcador de posicin, para una entrada de valor depende del tipo SQL de la columna de destino. Usted debe seleccionar el mtodo que corresponde al tipo de campo, por lo que utilizara setInt () para el tipo INTEGER, por ejemplo.
Una vez que todos los marcadores de posicin tienen valores establecidos y que se ha ejecutado la declaracin, usted puede actualizar cualquier o todos los marcadores de posicin (o incluso ninguno) antes de volver a ejecutar la declaracin.
En el siguiente fragmento de cdigo de PreparedStatement muestra el valor de posicin de sustitucin en accin.
24/09/2009
336
package sentenciapreparada; import java.sq l.DriverManager; import java.sq l.Connection; import java.sq l.PreparedStatement; import java.sq l.SQLException; public class TryPlaceHolders { public static void main(String[] args) { try { String url = "jdbc:odbc:technical_library"; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; String user = "guest"; String password = "guest"; Class.forName(driver); Connection connection = DriverManager.getConnection(url,user,password); String changeLastName = "UPDATE authors SET lastname = ? W HERE authid = ? ; PreparedStatement updateLastName = connection.prepareStatement(changeLastName); updateLastName.setString(1," Martin"); // Set lastname placeholder value updateLastName.setInt(2,4); // Set author ID placeholder value int rowsUpdated = updateLastName.executeUpdate(); // execute the update System.out.println("Rows affected: " + rowsUpdated); connection.close(); } catch (ClassNotFoundException cnfe) { System.err.println(cnfe); } catch (SQLException sqle) { System.err.println(sqle); } } }
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 337
Cmo funciona los mtodos getMaxRows(), getMaxFieldSize(), getQueryTimeout() de la Interfaz Statement. Este cdigo es bastante simple. Se crea una conexin usando una URL definida para una base de datos Access llamada technical_library. Una vez que se establece la conexin, un objeto Statement es creado, y que usando los mtodos apropiados para el perodo de tiempo, el mximo tamao de la columna, y el nmero mximo de filas se puede ejecutar . Los tres proporcionan esta informacin y tiran una excepcin de tipo SQLException si la informacin no est disponible, como es el caso con el controlador Microsoft Access. Para asegrese de que usted llame a todos los tres mtodos, incluso cuando una excepcin es lanzada, cada mtodo de llamada se encuentra en un bloque try aparte.
24/09/2009
338
package sentenciapreparada;
import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.SQLException; public class TestQueryTimeOut { public static void main(String[] args) { Statement statement = null; try { String url = "jdbc:odbc:technical_library"; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; String username = "guest"; String password = "guest"; Class.forName(driver); Connection connection = DriverManager.getConnection(url, username, password); statement = connection.createStatement(); System.out.println("Driver : " + driver); } catch (ClassNotFoundException cnfe) { System.out.println(cnfe); } catch (SQLException sqle) { System.out.println(sqle); }
24/09/2009
339
// Put each method call in a separate try block to execute them all try { System.out.print("\nMaximum rows :"); int maxRows = statement.getMaxRows(); System.out.print(maxRows == 0 ? " No limit" : " " + maxRows); } catch (SQLException sqle) { System.err.print(sqle); } try { System.out.print("\nMax field size :"); int maxFieldSize = statement.getMaxFieldSize(); System.out.print(maxFieldSize == 0 ? " No limit" : " " + maxFieldSize); } catch (SQLException sqle) { System.err.print(sqle); } try { System.out.print("\nTimeout :" ); int queryTimeout = statement.getQueryTimeout(); System.out.print(queryTimeout = = 0 ? " No limit" : " " + q ueryTimeout); } catch (SQLException sqle) { System.err.print(sqle); } } }
24/09/2009
340
Ejecutar DDL y DML Como ustedes saben, el executeQuery() es el mtodo utilizado para ejecutar una consulta SQL y que espera que regresen algunos resultados en un resultset. Como he indicado en el captulo anterior, hay otros tipos de sentencias SQL que no devuelven resultados. Estos estados se dividen en dos categoras primarias: Lenguaje de definicin de datos (DDL), y lenguaje de manipulacin de datos (DML). Las sentencias DDL son las que cambian la estructura de una base de datos, tales como CREATE TABLE y DROP TABLE. Las sentencias DML son las que cambian el contenido de la base de datos, tales como INSERT, UPDATE, y DELETE. Hasta el momento, todos los ejemplos que usted ha visto, incluida la aplicacin InteractiveSQL, han utilizado la executeQuery(). Si se trat de ejecutar una sentencia SQL que producen cambios en la base de datos (DML), es decir no producen un resultset de datos devueltos , el programa InteractiveSQL provocara una excepcin de error. Hubner Janampa Patilla - Administracin 24/09/2009 341
de Bases de Datos - 2009
La excepcin que contiene el mensaje "No se produjo el ResultSet" se produjo porque se ejecuta el executeQuery() que espera slo una sentencia SQL y que genera resultados en un ResulSet (Nota: incluso cuando una excepcin fue arrojado en este caso, la sentencia SQL sigue siendo ejecutado). La Declaracin prev la interfaz executeUpdate() mtodo para ejecutar las declaraciones que cambian el contenido de la base de datos en lugar de regresar los resultados. Al igual que executeQuery(), el executeUpdate() es un mtodo acepta un solo argumento de tipo String especificando la sentencia SQL que se va a ejecutar. Puede utilizar el mtodo executeUpdate() para ejecutar UPDATE, INSERT, DELETE o sentencias SQL. Tambin se puede utilizar para la ejecucin de declaraciones DDL. El mtodo devuelve un valor de tipo int que indica el nmero de filas afectadas por la operacin de la base de datos cuando se cambian los contenidos, o 0 para las declaraciones que no alteran la base de datos. El fragmento de cdigo que figura a continuacin ilustra el uso del mtodo executeUpdate() para agregar una fila a la tabla Authors.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 342
package ExecuteUpdate;
import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.SQLException; public class BuildTables { public static void main(String[] args) { try { String username = "guest"; String password = "guest"; String url = "jdbc:odbc:technical_library"; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; String[] SQLStatements = {"CREATE TABLE online_resources2 (pub_id int, name char(48), url char(80))", "INSERT INTO online_resources VALUES(1, 'Wrox Home Page','http://www.wrox.com')", "INSERT INTO online_resources VALUES(2, 'JavaSoft Home Page','http://www.javasoft.com')", "INSERT INTO online_resources VALUES(3, 'Apress Home Page','http://www.apress.com')", "INSERT INTO online_resources VALUES(4, 'Addison Wesley Home Page'," + "'http://www.awprofessional.com')","INSERT INTO online_resources VALUES(5, 'Java Developer Connection'," + "'http://java.sun.com')"}; Class.forName(driver); Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); for (String SQLStatement : SQLStatements) { statement.executeUpdate(SQLStatement); System.out.println(SQLStatement); } } catch (ClassNotFoundException cnfe) { System.err.println(cnfe); } catch (SQLException sqle) { System.err.println(sqle); } } }
24/09/2009
343
Resumen En este captulo, que ha aplicado las habilidades bsicas del JDBC, que aprendi anteriormente en algunas nuevas formas, ampli su conocimiento detallado de algunos de los temas que se cubren, e incluso meti en algunos nuevos. Los elementos ms importantes que me introduje en esta presentacin incluyen: La declaracin de una interfaz proporciona mtodos que le permiten limitar el tamao del campo y el nmero de filas que se pueden generar en un resultset. Tambin puede establecer una duracin mxima para una consulta SQL .
24/09/2009
344
Resumen (Cont) Un objeto parametrizado PreparedStatement encapsula una sentencia SQL y proporciona mtodos para que usted fije valores para los parmetros de marcadores de posicin, para los parmetros de la sentencia SQL que estn representados por un signo de interrogacin (?). JDBC proporciona un conjunto de asignaciones preferidas entre los tipos SQL y tipos Java. Los tipos de datos SQL DECIMAL y NUMERIC son asignados a la clase de tipo BigDecimal, que es el que se define en el paquete java.math. Puede utilizar esta clase y la clase BigInteger para aplicaciones que necesitan de precisin numrica ms all de las capacidades de los tipos primitivos numricos.
24/09/2009
345
24/09/2009
346
24/09/2009
347
Referencia
Professional Eclipse 3 for Java Developers by Berthold Daum November 2007.
Professional Java, JDK 5 Edition by W. Clay Richardson, Donald Avondolio, Joe Vitale, Scot Schrager, Mark W. Mitchell, Jeff Scanlon February 2006.
Beginning Java 2, JDK 5 Edition Ivor Horton, 2005. Professional Java JDK 6 Edition by W. Clay Richardson, Donald Avondolio, Scot Schrager, Mark W. Mitchell, Jeff Scanlon January 2007.
24/09/2009
348
Continuara
24/09/2009
350
24/09/2009
351
24/09/2009
352
Qu es una clase? Una clase es una receta para un tipo particular de objetos que define un nuevo tipo. Puede utilizar la definicin de una clase para crear objetos de esa clase del tipo que sea, para crear objetos que incorporen todos los componentes especificados como pertenecientes a esa categora.
24/09/2009
353
En esencia, una clase de definicin es muy simple. Hay slo dos tipos de cosas que usted puede incluir en una definicin de clase: I . Campos Estas son las variables que almacenan datos que suelen distinguir un objeto de la de otra clase. Tambin se refiere a datos como miembros de una clase. II. Mtodos Que define las operaciones que puede realizar para la clase.
24/09/2009
354
Los campos en una definicin de clase pueden ser de cualquiera de los tipos primitivos, o bien pueden ser referencias a objetos de tipo de cualquier clase, incluyendo el que usted est definiendo.
24/09/2009
355
24/09/2009
356
Tipos de clases
24/09/2009
357
24/09/2009
358
Diagrama de clase
24/09/2009
360
Estructura de un mtodo
24/09/2009
361
24/09/2009
362
24/09/2009
363
Trabajo prctico N 1
Consideremos las clases mostradas Clave: Implemente los mtodos mostrados Explicando?
24/09/2009
364
package Sphere; class Sphere { static final double PI = 3.14; // Class variable that has a fixed value static int count = 0; // Class variable to count objects // Instance variables double radius; // Radius of a sphere double xCenter; // 3D coordinates double yCenter; // of the center double zCenter; // of a sphere // Class constructor Sphere(double theRadius, double x, double y, double z) { radius = theRadius; // Set the radius // Set the coordinates of the center xCenter = x; yCenter = y; zCenter = z; ++count; // Update object count } // Static method to report the number of objects created static int getCount() { return count; // Return current object count }
package Sphere; class CreateSpheres { public static void main(String[] args) { System.out.println("Number of objects = " + Sphere.getCount()); Sphere ball = new Sphere(4.0, 0.0, 0.0, 0.0); // Create a sphere System.out.println("Number of objects = " + ball.getCount()); Sphere globe = new Sphere(12.0, 1.0, 1.0, 1.0); // Create a sphere System.out.println("Number of objects = " + Sphere.getCount()); // Output the volume of each sphere System.out.println("ball volume = " + ball.volume()); System.out.println("globe volume = " + globe.volume()); }
24/09/2009
366
Trabajo prctico N 2
Consideremos las clases mostradas Clave: Implemente los mtodos mostrados Explicando?
24/09/2009
367
class Sphere {
static final double PI = 3.14; // Class variable that has a fixed
value
// Instance variables double radius; // Radius of a sphere double xCenter; double yCenter; double zCenter; // 3D coordinates // of the center // of a sphere
// Class constructor Sphere(double theRadius, double x, double y, double z) { radius = theRadius; // Set the radius // Set the coordinates of the center xCenter = x; yCenter = y; zCenter = z; ++count; // Update object count }
24/09/2009
368
class CreateSpheres {
public static void main(String[] args) { System.out.println("Number of objects = " + Sphere.getCount()); Sphere esfera1 = new Sphere(4.0, 0.0, 0.0, 0.0); // Create a sphere System.out.println("Number of objects = " + esfera1.getCount()); Sphere esfera2 = new Sphere(12.0, 1.0, 1.0, 1.0); // Create a sphere System.out.println("Number of objects = " + Sphere.getCount()); Sphere esfera3 = new Sphere(10.0, 10.0, 0.0); Sphere esfera4 = new Sphere(); System.out.println("Number of objects = " + Sphere.getCount());
// Output the volume of each sphere System.out.println(" volume = " + esfera1.volume()); System.out.println(" volume = " + esfera2.volume()); System.out.println(" volume = " + esfera3.volume()); System.out.println(" volume = " + esfera4.volume()); } }
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 369
Trabajo prctico N 3
Consideremos las clases mostradas Clave: Mtodo setTime() Explicando?
24/09/2009
370
package clase_time;
public class Time1 { private int hour; // 0 - 23 private int minute; // 0 - 59 private int second; // 0 - 59
// Establecer un nuevo valor de tiempo de uso de tiempo universal; garantizar que // los datos sigue siendo coherente mediante el establecimiento de valores no vlidos a cero public void setTime( int h, int m, int s ) { hour = ( ( h >= 0 && h < 24 ) ? h : 0 ); // validar hora minute = ( ( m >= 0 && m < 60 ) ? m : 0 ); // validar minutos second = ( ( s >= 0 && s < 60 ) ? s : 0 ); //validar segundos } // convert to String in universal-time format (HH:MM:SS) public String toUniversalString() { return String.format( "%2d:%02d:%02d", hour, minute, second ); } // convert to String in standard-time format (H:MM:SS AM or PM) public String toString() { return String.format( "%d:%02d:%02d %s", ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 ), minute, second, ( hour < 12 ? "AM" : "PM" ) ); } } 24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 371
package clase_time;
public class Time1Test { public static void main( String args[] ) { // create and initialize a Time1 object Time1 time = new Time1(); // invokes Time1 constructor // output string representations of the time System.out.print( "El primer tiempo universal es : " ); System.out.println( time.toUniversalString() ); System.out.print( "El tiempo estandar es :" ); System.out.println( time.toString() ); System.out.println(); // output a blank line // change time and output updated time time.setTime( 13, 27, 6 ); System.out.print( "El tiempo universal despes de setTime es: " ); System.out.println( time.toUniversalString() ); System.out.print( "El tiempo estandar despes de setTime es : " ); System.out.println( time.toString() ); System.out.println(); // output a blank line
// setTime con valores no correctos time.setTime( 99, 99, 99 ); System.out.println( " Despes de intentar asignar un valor incorrecto a setTime, la salida es : " ); System.out.print( "Universal time: " ); System.out.println( time.toUniversalString() ); System.out.print( "tiempo estandar: " ); System.out.println( time.toString() ); } 24/09/2009 } Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 372
Trabajo prctico N 4
Consideremos las clases mostradas
Clave: Composicin Explicando?
24/09/2009
373
package composicion;
public class Date { private int month; // 1-12 private int day; // 1-31 based on month private int year; // any year
// constructor: call checkMonth to confirm proper value for month;
// utility method to confirm proper day value based on month and year private int checkDay( int testDay ) { int daysPerMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // check if day in range for month if ( testDay > 0 && testDay <= daysPerMonth[ month ] ) return testDay; // check for leap year if ( month == 2 && testDay == 29 && ( year % 400 == 0 || ( year % 4 == 0 && year % 100 != 0 ) ) ) return testDay; System.out.printf( "Invalid day (%d) set to 1.", testDay ); return 1; // maintain object in consistent state } // end method checkDay // return a String of the form month/day/year public String toString() { return String.format( "%d/%d/%d", month, day, year ); } // end method toString } // end class Date
// call checkDay to confirm proper value for day public Date( int theMonth, int theDay, int theYear ) { month = checkMonth( theMonth ); // validate month year = theYear; // could validate year day = checkDay( theDay ); // validate day System.out.printf( "Date object constructor for date %s\n", this ); } // end Date constructor
// utility method to confirm proper month value private int checkMonth( int testMonth ) { if ( testMonth > 0 && testMonth <= 12 ) // validate month return testMonth; else // month is invalid { System.out.printf( "Invalid month (%d) set to 1.", testMonth ); return 1; // maintain object in consistent state } // end else Hubner Janampa Patilla - Administracin } // end method checkMonth 24/09/2009 de Bases de Datos - 2009
374
package composicion; public class EmployeeTest { public static void main( String args[] ) { Date birth = new Date( 7, 24, 1949 ); Date hire = new Date( 3, 12, 1988 ); Employee employee = new Employee( "Bob", "Blue", birth, hire ); System.out.println( employee ); } // end main } // end class EmployeeTest
24/09/2009
376
Trabajo prctico N 5
Consideremos las clases mostradas Clave: Polimorfismo
Explicando el diagrama de clases?
24/09/2009
377
24/09/2009
378
package polimorfismo;
public class CommissionEmployee3 { private String firstName; private String lastName; private String socialSecurityNumber; private double grossSales; // Bruto de ventas semanales private double commissionRate; // commission percentage
// five-argument constructor
// set first name public void setFirstName( String first ) { firstName = first; } // end method setFirstName
public CommissionEmployee3 ( String first, String last, String ssn, double sales, double rate ) {
// implicit call to Object constructor occurs here
// return first name public String getFirstName() { return firstName; } // end method getFirstName
// set last name public void setLastName( String last ) { lastName = last; } // end method setLastName // return last name public String getLastName() { return lastName; } // end method getLastName // set social security number public void setSocialSecurityNumber( String ssn ) { socialSecurityNumber = ssn; // should validate } // end method setSocialSecurityNumber
firstName = first; lastName = last; socialSecurityNumber = ssn; setGrossSales( sales ); // validate and store gross sales setCommissionRate( rate ); // validate and store commission
rate } // end five-argument CommissionEmployee3 constructor
24/09/2009
379
// return social security number public String getSocialSecurityNumber() { return socialSecurityNumber; } // end method getSocialSecurityNumber // set gross sales amount public void setGrossSales( double sales ) { grossSales = ( sales < 0.0 ) ? 0.0 : sales; } // end method setGrossSales // return gross sales amount public double getGrossSales() { return grossSales; } // end method getGrossSales // set commission rate public void setCommissionRate( double rate ) { commissionRate = ( rate > 0.0 && rate < 1.0 ) ? rate : 0.0; } // end method setCommissionRate
// return commission rate public double getCommissionRate() { return commissionRate; } // end method getCommissionRate // calculate earnings public double earnings() { return getCommissionRate() * getGrossSales(); } // end method earnings
// return String representation of CommissionEmployee3 object
public String toString() { return String.format( "%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f", "commission employee", getFirstName(), getLastName(), "social security number", getSocialSecurityNumber(), "gross sales", getGrossSales(), "commission rate", getCommissionRate() ); } // end method toString } // end class CommissionEmployee3
24/09/2009
380
package polimorfismo;
public class BasePlusCommissionEmployee4 extends CommissionEmployee3 { private double baseSalary; // base salary per week // six-argument constructor public BasePlusCommissionEmployee4( String first, String last, String ssn, double sales, double rate, double salary ) { super( first, last, ssn, sales, rate ); setBaseSalary( salary ); // validate and store base salary } // end six-argument BasePlusCommissionEmployee4 constructor // set base salary public void setBaseSalary( double salary ) { baseSalary = ( salary < 0.0 ) ? 0.0 : salary; } // end method setBaseSalary
// return base salary public double getBaseSalary() { return baseSalary; } // end method getBaseSalary // calculate earnings public double earnings() { return getBaseSalary() + super.earnings(); } // end method earnings
// return String representation of BasePlusCommissionEmployee4
public String toString() { return String.format( "%s %s\n%s: %.2f", "base-salaried", super.toString(), "base salary", getBaseSalary() ); } // end method toString } // end class BasePlusCommissionEmployee4
24/09/2009
381
package polimorfismo; public class PolymorphismTest { public static void main( String args[] ) { // assign superclass reference to superclass variable CommissionEmployee3 commissionEmployee = new CommissionEmployee3( "Sue", "Jones", "222-222222", 10000, .06 ); // assign subclass reference to subclass variable BasePlusCommissionEmployee4 basePlusCommissionEmployee = new BasePlusCommissionEmployee4( "Bob", "Lewis", "333-33-3333", 5000, .04, 300 ); // invoke toString on superclass object using superclass variable System.out.printf( "%s %s:\n\n%s\n\n", "Call CommissionEmployee3's toString with superclass reference ", "to superclass object", commissionEmployee.toString() ); // invoke toString on subclass object using subclass variable System.out.printf( "%s %s:\n\n%s\n\n", "Call BasePlusCommissionEmployee4's toString with subclass", "reference to subclass object", basePlusCommissionEmployee.toString() ); // invoke toString on subclass object using superclass variable CommissionEmployee3 commissionEmployee2 = basePlusCommissionEmployee; System.out.printf( "%s %s:\n\n%s\n", "Call BasePlusCommissionEmployee4's toString with superclass", "reference to subclass object", commissionEmployee2.toString() ); } // end main } // end class PolymorphismTest
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 382
La receta de Iconix
24/09/2009
384
Ms informacin en la pgina:
http://www.iconix.com
24/09/2009
385
24/09/2009
386
Enfoque ICONIX
Modelado de objetos conducido por casos de uso Centrado en datos: se descompone en fronteras de datos Basado en escenarios que descomponen los casos de uso Enfoque iterativo e incremental Ofrece trazabilidad Uso directo de UML (estndar del Object Management Group)
24/09/2009
387
DINMICA
Enfoque
Diagrama de robustez ESTTICA
Cdigo
24/09/2009
Modelo de dominio
388
Preguntas iniciales
Quines son los usuarios (actores) del sistema y qu tratan de hacer? Cules son los objetos del mundo real (dominio del problema) y las asociaciones entre ellos? Qu objetos son necesarios para cada caso de uso? Cmo colaboran los objetos en cada caso de uso? Cmo se manejan aspectos de tiempo real? Cmo se construir realmente el sistema a nivel de piezas?
24/09/2009
389
Caractersticas
Flexible para diferentes estilos y clases de problemas Apoyo a la manera de trabajo de la gente Gua para los menos experimentados Expone los productos anteriores al cdigo de manera estndar y comprensible
24/09/2009
390
24/09/2009
391
Anlisis de robustez
Identificar grupos de objetos que realizan escenario Actualizar diagramas de clases del dominio
Terminar modelo esttico Verificar cumplimiento de requerimientos META: revisin crtica del diseo
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 393
Escribir el cdigo Pruebas de unidad e integracin Pruebas de sistema y aceptacin basadas en casos de uso
24/09/2009
395
Modelando el dominio
Fuentes de informacin:
Descripcin de alto nivel del problema Requerimientos de bajo nivel Conocimiento de expertos Literatura
24/09/2009
397
Clases y objetos
Objeto:
Algo tangible o visible Algo que puede aprehenderse intelectualmente Algo hacia lo cual se dirigen pensamientos o acciones
Un objeto tiene:
Estado Comportamiento Identidad
24/09/2009
398
Clases y objetos
Estado: propiedades y sus valores particulares Comportamiento: cmo acta y responde (a cambios de estado y paso de mensajes)
24/09/2009
399
Clases y objetos
Clase:
Descripcin de un conjunto de objetos que comparten una estructura, un comportamiento, relaciones y semntica comunes
Interfaz:
Vista exterior de una clase; permite contrato acerca de las responsabilidades que ofrece y exige; asla el interior. Es el QU hace
Implementacin:
Vista interior, particular; CMO lo hace
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 400
Atributos
CLASE Mtodos
Modelando el dominio
Procedimiento:
Tomar documentos disponibles y hacer una lectura rpida, subrayando los sustantivos y notando frases posesivas y verbos (uso posterior) Los sustantivos y frases nominales se convertirn en objetos y atributos Los verbos y frases verbales se convertirn en operaciones y relaciones Las frases posesivas indican los sustantivos que son atributos y no objetos
24/09/2009
402
Modelando el dominio
Procedimiento (II)
Formar una lista con los sustantivos y frases nominales identificados, evitando los plurales y las repeticiones y ordenndola alfabticamente Revisar la lista eliminando los elementos innecesarios (irrelevantes o redundantes) o incorrectos (vagos o conceptos fuera del alcance del modelo o representan acciones an cuando parezcan sustantivos) Volver a revisar textos, leyendo entre lneas
24/09/2009
403
----------------
24/09/2009
404
Identificar Actores
Separar posibles atributos (identificados por frases posesivas) y valores de atributos discretos textuales
Modelando el dominio
Procedimiento (III) Construir relaciones de generalizacin
Una generalizacin es una relacin en la cual una clase es una generalizacin de otra. Tambin se le llama tipo-de o es-una. La clase ms general se llama Antecesor o Superclase y la otra (refinamiento de la primera) Descendiente o Subclase. La subclase hereda los atributos y mtodos de la superclase y las asociaciones en que participa. Las puede modificar.
24/09/2009
406
cuenta
aPlazo
Cheques
24/09/2009
Ejemplo
407
Modelando el dominio
Procedimiento (III) Establecer asociaciones entre clases
Una asociacin es una relacin esttica entre dos clases; indican dependencia, pero no accin (aunque se las nombre con un verbo) Deben ser persistentes (es modelo esttico)
24/09/2009
408
Multiplicidad
Se lee as: A se relaciona con 1 A un B 1..* A uno o ms B 0..1 A cero o un B * A cero o ms B m..n A entre m y n B n A exactamente n B (siempre del lado de B) Lo mismo en sentido de B a A
409
B B B B B B
asociacin m
Navegabilidad: la flecha indica que podemos hallar a B a partir de A. Sin flecha puede indicar doble sentido Hubner Janampa Patilla o indefinido 24/09/2009
- Administracin de Bases de Datos - 2009
Modelando el dominio
Procedimiento (III) Establecer relaciones de agregacin
Una agregacin es una relacin en la cual una clase est formada por otras (sus partes) A veces se le llama parte-de En UML se distingue una forma ms fuerte llamada Composicin, pero para este mtodo no se har diferencia
24/09/2009
410
Brazo
Gancho
Ejemplo
24/09/2009
411
Modelando el dominio
Procedimiento (IV) Clases de asociacin
Una clase de asociacin es una variante de las asociaciones muy til cuando hay relaciones muchas-a-muchas entre clases
Pueden conseguirse clase del dominio a partir de entidades en bases de datos preexistentes Cuando una clase tiene demasiados atributos, conviene dividirla en clases auxiliares y usar agregacin para reunirlas
24/09/2009
412
persona
24/09/2009
413
24/09/2009
414
Advertencia
No se tarde demasiado en preparar la lista; ms adelante la refinar y completar
24/09/2009
415
24/09/2009
416
Casos de uso
Buscan capturar los requerimientos del usuario para sistema nuevo Puede ser desde cero o a partir de un sistema anterior Especifica escenarios detallados de lo que hace el usuario para lograr sus fines Es la base de todo lo que sigue en este mtodo y otros semejantes
24/09/2009
417
Casos de uso
Definicin:
Un caso de uso es una secuencia de acciones que un actor (usualmente una persona, pero que puede ser una entidad externa, como otro sistema o un elemento de hardware) realiza dentro del sistema para lograr una meta
24/09/2009
418
Casos de uso
Se describe mejor como una frase verbal en presente y en voz activa. Ejemplos:
Admite paciente, Realiza transaccin o Genera reporte
Especifica de manera precisa, no ambigua, un aspecto del uso del sistema sin suponer un diseo o implementacin particulares. Toda la funcionalidad del sistema debe estar expresada en casos de uso
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 419
Casos de uso
Actor: es un papel realizado por una persona, base de datos externa, otro sistema. Los actores reflejan todas las entidades que deben intercambiar informacin con el sistema. Varias personas pueden realizar un mismo papel Una persona puede jugar varios papeles, en momentos distintos
Diagrama de casos de uso: rene actores y casos de uso
24/09/2009
420
Casos de uso
Registra transaccin
Genera reporte
empleado
Actualiza informacin
No cambie smbolos, son parte de un estndar internacional Hubner Janampa Patilla - Administracin
de Bases de Datos - 2009
421
Casos de uso
Algunos autores separan los actores en dos: Primarios: los que inician casos de uso
Secundarios: responden a una necesidad del sistema que el software no puede resolver, no inician la accin.
24/09/2009
422
Casos de uso
Existen dos tipos de caso de uso: De nivel de anlisis: representa comportamiento comn de un grupo de caos De nivel de diseo: instancias del anterior, con comportamiento especfico
24/09/2009
423
24/09/2009
424
24/09/2009
425
Asegrese que los casos de uso corresponden a lo que efectivamente hacen los usuarios
24/09/2009
426
24/09/2009
427
24/09/2009
Objeto fronterizo
Entidad
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009
Control
428
24/09/2009
429
Curso Bsico
Actor: inicia la accin Interfaz de Usuario Funciones (acciones) Entidad (almacenes)
Curso Alterno
24/09/2009
432
24/09/2009
433
24/09/2009
434
5.
Copiar texto del caso de uso (parte izquierda). Agregar objetos entidad del diagrama de robustez (parte superior derecha). Agregar objetos fronterizos y actores (parte superior izquierda). Asignar mtodos y mensajes: los objetos de control pasan a ser mtodos de entidades o de objetos fronterizos (Responsabilidad). Si un objeto de control se necesita, se agrega (Cuando slo es intermediario sin actividad propia, se funde con fronterizo o entidad
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 435
24/09/2009
L I N E A D
Actor: Alguien
GUI: Botn
:Alumno
:Libros
Mtodo1( ) Mtodo( )
E V I
Respuesta
D A
24/09/2009
436
24/09/2009
437
24/09/2009
438
24/09/2009
439
Ayuda a agregar aspectos del comportamiento que tiene el nuevo sistema. Se disean comnmente para sistemas de tiempo real o sistemas distribuidos.
24/09/2009
440
Diagramas de Colaboracin
Especifican mas los diagramas de robustez. Se apegan ms a la situacin real. nfasis en el orden de las operaciones entre los objetos del caso de uso. Agrega detalles extras al momento del paso de mensajes entre los objetos.
24/09/2009
441
Diagramas de Colaboracin
1. Cuenta, cantidad
:cajero :IUDeposito
2. Busca la cuenta
Depositar
3. Deposita en cuenta
Cuenta
4.
Se representan de igual forma que los diagramas de robustez, pero llevan un nmeros que determina o indica el orden de ejecucin sobre las flechas.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 442
Diagramas de Estados
Diagramas de Estado = Mquinas de estado finito = Autmatas
Solucionan la representacin del comportamiento dinmico de un objeto o grupo de objetos. Muestra el ciclo de vida de los objetos, mediante los diferentes estados que tiene o pasa un objeto.
24/09/2009
443
24/09/2009
444
Estado
Estado
Entrar Hacer Salir
Transiciones.
Estado final.
24/09/2009
445
Editand o
Salvando Si cambios / cerrar
Diagramas de Actividades
Descienden de los diagramas de flujo, redes de Petri y de las mquinas de estado. Capturan las acciones y los resultados de estas acciones. Representan la secuencia de actividades que se realizan en un caso de uso (mas detallado, como un diagrama de flujo).
24/09/2009
447
Actividad 3
Entregar
Actividad 5 Actividad 6
Actividad
Diagramas de Actividades
Swimlanes (carriles) permiten agrupar las actividades dependiendo de quien las realizadas. Cada responsable (clase) de alguna actividad tiene un carril.
JEFE Saluda CAPTURIST A Carga datos Registra Calcula total Autoriza Informa INVENTARIO S
24/09/2009
449
Capitulo 7 Requerimientos
24/09/2009
450
Requerimientos
Qu es un requerimiento? Criterio especifico de un usuario que un sistema tiene que satisfacer. Los requerimientos definen el comportamiento y funcionalidad requerida por el usuario para un sistema. Expresados por frases que incluyen: 1. shall tiene que, debe que 2. must debe de, haber de
24/09/2009
451
Requerimientos
Tipos de requerimientos: 1. Funcionales: el sistema tiene que generar automaticamente . 2. De Datos: 3. De ejecucin (desempeo): El sistema debe de validar los datos que entran. 4. De capacidad: El sistema tiene que mostrar informacin de 10,000 transacciones. 5. De prueba: El sistema tiene que permitir hacer transacciones de 50 usuarios al mismo tiempo.
24/09/2009
452
Se sugiere hacer un caso de uso por cada requerimiento funcional, debido a que:
Un caso de uso describe una unidad de comportamiento. Los requerimientos describen las reglas que rigen el comportamiento del sistema.
Las funciones son acciones individuales que ocurren dentro del comportamiento.
Un caso de uso puede satisfacer mas de un requerimiento (funcional/no funcional), o bien la combinacin de varios casos de uso pueden satisfacer un solo requerimiento.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 453
Trazabilidad de Requerimientos
Al iniciar un proyecto se pueden asignar algunos requerimientos a casos de uso; pero como avanza el proyecto estos se verifican/validan trazabilidad. Asignacin/Trazabilidad son trminos importantes a travs de todo el ciclo de vida, debido a que nos ayudan a determinar si el anlisis, diseo cumplen con los requerimientos deseados.
24/09/2009
454
Trazabilidad de Requerimientos
Antes de iniciar la codificacin hay que analizar estos aspectos: Captura de Datos: encontrar caminos efectivos para capturar los elementos de cada fase del ciclo de vida.(puedes actualizar o cambiar algunos elementos de fases del ciclo). Anlisis de datos y reduccin: asegurar que todos los puntos hechos/asignados son vlidos, que todos los requerimientos fueron asignados y realizados (trace). Reporte de datos: documentacin del proyecto (reporte de los resultados de la captura de datos y el anlisis y reduccin).
24/09/2009
455
Puntos a realizar
Revisa los requerimientos asignados a cada uno de los casos de uso (todos los requerimientos deben estar asignados entre todos los casos de uso). Verificar que cada requerimiento es realizado en por lo menos una clase del modelo de dominio. Verificar que los requerimientos se satisfacen en por lo menos un casos de uso (busca entre la descripcin de los casos de uso y los diagramas de secuencia).
Si realizaste diagramas de colaboracin o estado, verifica que el comportamiento de los diagramas (estados) cumplan con lo especificado por los requerimientos.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 456
Capitulo 8 Implementacin
24/09/2009
457
Administracin de Proyectos
Ser listo e ingenioso. No desconcentrarse y perder el enfoque en el proceso del proyecto.
No utilizar herramientas visuales para generar pruebas tontas o simples del cdigo.
Apreciar mas la calidad de cdigo que la cantidad.
24/09/2009
458
24/09/2009
459
Pruebas
Para saber si tu sistema es aceptable, realiza pruebas: Caja Blanca
24/09/2009
460
Mtricas
1. Determinar el peso de tus clases, para saber la complejidad de tus clases.
24/09/2009
461
24/09/2009
462
Casos de uso
Persona, mquina o programa externo al sistema que se va a realizar, que inician una accin o responden a una solicitud del sistema ACTOR
Representa una accin o funcin que el actor desea realizar. Se describe con un verbo o con un verbo y un complemento. CASO DE USO
24/09/2009
463
Diagramas de clases
Nombre Atributos CLASE A D E Mtodos Abstraccin de un conjunto de objetos con comportamiento comn.
C Relacin de Agregacin o Contencin: la clase D contiene a la clase E, es decir, la clase E se agreg a la clase D. Tambin llamada parte-de: E es parte de D
464
Objeto fronterizo
Objeto de control
Relaciones prohibidas
Entidad
24/09/2009
465
Diagramas de Secuencia
L
Actor Froterizo :Entidad
I N E A D E
Mtodo( ) Mtodo( )
Respuesta
V I
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009
D A
466
Diagramas de Estados
Estado inicial. Estados del objeto.
Estado
Estado
Entrar Hacer Salir
Transiciones.
Estado final.
24/09/2009
467
Bibliografa.
24/09/2009
468