JDBC DatabaseMetaData (Memoria).doc - UPCommons

searchcoilΛογισμικό & κατασκευή λογ/κού

15 Αυγ 2012 (πριν από 4 χρόνια και 11 μήνες)

483 εμφανίσεις

Pág.
1

de
94


Títol:

JDBC DatabaseMetaData


Volum:

1/1

Alumne:

Joan Costa Canal


Director/Ponent:

Lluís Solano Albajes

Departament:

LSI

Dat
a:

08
-
07
-
2007

Pág.
3

de
94

Pág.
5

de
94




DADES DEL PROJECTE


Títol del Projecte:JDBC DatabaseMetadata


Nom de l'estudiant: Joan Costa Canal

Titulació: Enginyeria en Informàtica

Crèdits: 15 crèdits

Director/Ponent: Lluís Solano Albajes

Departament: LSI



MEMBRES DEL TRIBUNAL

(nom i signatur
a)


President: Lluís Pérez Albajes


Vocal: Josep Elgueta Monto


Secretari: Lluís Solano Albajes



QUALIFICACIÓ


Qualificació numèrica:

Qualificació descriptiva:


Data:



Pág.
7

de
94


Índex




Agraïments


Capítol 1


Introducció

......................................................................................... 11


Capítol 2
-

Anàlisi de requeriments

......................................................
............... 19


Capítol 3


Conceptes sobre Bases de Dades i Java JDBC

................................ 27


Capítol 4


Casos d´ús

......................................................................................... 55


Capítol 5


Disseny i Imple
mentació

.................................................................... 59


Capítol 6


Joc de proves

.....................................................................................
71


Capítol 7


Planificació i Costos Reals

..................
...............................................

83


Ca
pítol 8



Conclusions

........................................................................................ 87


Capítol 9



Bibliografia

..............................................................
............................ 89


Apèndix 1: Definicions i Acrònims

......................................................................... 91


Apèndix 2: Breu Manual d’usuari

.......................................................................... 93







Pág.
9

de
94


Agraïments



Vull agrair la col.laboració del meu director Lluís Solano en donar
-
me pautes per a la realització del PFC.



Pág.
11

de
94



1


Introducció


Aquest capítol està destinat a descriure el projecte fent ènfasi en els objectius, motius de
realització i justificació del projecte, Es detalla les eines de treball emprades.

La part final explica
com estructura la documentació del projecte.



1.1 Descripció i objectius del projecte


El projecte consisteix en el desenvolupament (especificació, disseny i implementació) d’una eina
que ens permeti interactuar amb diferents gestor
s de Bases de Dades relacionals. Una eina que
ens doni com s
’estructura una Bases de Dades
(objectes) i quines dades s’hi guarden.


L’objectiu principal del treball es demostrar un possible ús de l’especificació JDBC, centrarnos en
una part de la mateixa (
interface DatabaseMeta
D
ata): els
metadatos

de les Bases de Dades o dit
informalment tota la informació que es pot extreure d’una Base de Dades des del punt de vista
intern (descripció taules, vistes, procediments) sense oblidar l’extern (contingut taules).

I es que
la tecnologia o especificació JDBC de Java pot oferir grans possibilitats de les quals intentarem
aprofitar una part.i e
l qual obre tot un ventall amplíssim

de possibilitats.


L’objectiu es desenvolupar una eina bàsica que pugui accedir a la inf
ormació de les bases de
d
ades més comunes o més usades en el mercat avui dia.. Per a portar
-
ho a terme, el llenguatje
escollit es Java i la API JDBC de Java per accedir a les Bases de Dades.


Característiques principals inicials de la eina:




Definir conex
ions a Bases de Dades en funció de la parametrització dels drivers

Caldrà Especificar paràmetres de cada conexió: Ports (

listeners
” o “oients” de
peticions
), usuari, passoword….



Visualitzar les Bases de Dades de sistema i d’usuari.



Visualitzar defini
cions

de taules, vistes i index
s de sistema i d’usuari.



Visualitzar
les claus primaries i claus forà
nees.



Visualitzar autoritzacions operacions sobre Taules i camps.



Visualitzar procediments emmagatzemats i llurs paràmetres d’entrada I sortida.



Executar Sentenc
ies SQL que l’usuari desitji (consultes, actualitzacions …)



1.2 Motivació


Des de fa més de 12 anys laboralment he estat treballant exclusivament en el mon Host.
He
treballat amb IBM 3090 però la major part ha estat i és avui dia dins sistema IBM AS/400.

Dins el
mon financer (treballo en una entitat financera) continua viu el llenguatge COBOL i que de ben
segur causarà sorpresa en
ambient purament universitaris...



Pág.
12

de
94

Una motivació que m’ha mogut personalment

és entrar al món visual i al mó
n de la programa
ció
orientada a objectes. El llenguatge no podia ser altre que Java. I com tota empresa que es
gestioni informàticament, la part importat son les Bases de Dades Relacionals. Així entra el
treball amb JDBC. I com que a tot empresa solen existir diferentes c
ases de SGBDR amb
cadascuna la seva arquitectura i gestió, aquí entra el sentit

del projecte JDBC
DatabaseMetaD
ata: una eina única
que tracta diferents gestors.


La programació orientada a objectes

(POO) és la metodologia molt
emprada actualment
, i el
lle
nguatge de modelització UML
.... i com no,
el llenguatge de programació Java en són els eixos
principals.

En Java tot són objectes (classes).



1.3 Estudi del mercat


Convé preguntar
-
nos si al mercat existeixen ja eines semblants al que es vol realiltzar. D
oncs si,
existeixen alternatives. Les analitzarem i extraurem conclusions.


1.3.1 Alternatives al Mercat



En l’estudi del mercat he vist que ja hi han alternatives.
He descobert que l
a principal
competid
ora del JDBC DatabaseMetaData é
s JDBC Manager. En d
estaquem:


JDBC Manager

(URL:
http://jdbcmanager.sourceforge.net/
)




JDBC Manager


Pág.
13

de
94

Es una eina que usa Java Swing GUI (front end) que permet conectarse a qualsevol JDBC Driver
i amb l’ús ANSI SQL
-
92.
É
s una bona ideia del creador Francisco Morero Peyrona. Va començar
a realitzar el projecte al set
-
02 i va començar a escriure codi al gen
-
03. La versió penjada a la
web es la 0.4 i es del 2004 i no hi ha continuitat com a eina independent..
Ha estat teste
jat per a
treballar amb Microsoft SQL Server i usa SQL
-
92. (revisió major del SQL
-
87). I aquí s’ha quedat.


Però precisament Sun Microsystems buscava un mòdul que ajudés a les tasques de gestió de
bases de dades i que es pogués integrar al IDE oficial de S
un: NetBeans. Es curiós que hi han
moltes eines de programació que no tenen integrat en el propi IDE l’acces a les Bases de Dades.
Un exemple paral.lel es el propi Eclipse que cal usar plugins per a tenir aquesta funcionalitat
integrada (exemples: Eclipse
SQL Explorer). Amb tot això, el JDBC Explorer va ser seleccionat
per ser integrat a la versió NetBeans que va sortir a finals del 2005. Felicitats pel creador.


SQL Developer (Oracle)


Es un explorador de dades que usa també els conectors JDBC.
Permet treb
allar amb SQL i amb
PL/SQL, realitzar informes …
Malgrat permetre accés a altres bases de dades, veiem que està
encarat a usar
-
se
sobretot
en
les pròpies
bases de dades Oracle.




Oracle SQL Developer



1.3.2 Conclusions


Analitzat les alternatives de me
rcat trobem alguns motius de pes:


Pág.
14

de
94



No trobem eines independents que suportin la riquesa de les últimes implementacions
de JDBC i de SQL3. La versió lliu
re de JDBC Manager s’ha quedat
ja desfasada i
descontinuada.



No treballen correctament per a quelsevol S
GBDR. I es que, i tal com es també passa en
el projecte, realitzar un programa que serveixi per a qualsevol gestor es fa realment
complex donat que cada gestor té les seves particularitats. Tots son relacionals però
d’arquitectures ben diferentes.



No gene
ren informes amb sortida a EXCEL i a PDF de forma directa, per dir alguns
formats. A l’empresa s’usa bastant.



1.4 Justifiació del projecte


Convé preguntar
-
nos si el projecte té sentit el realiltzar
-
ho. Doncs bé, des del meu punt de vista i
observant per

exemple en la entitat on treballo la resposta es que si. Una eina que fos
generalista, àmplia i robusta i amb moltes funcionalitats a les Bases de Dades crec que tindria
gran ús i utilitat. Avui dia encara veig com s’accedeix a la informació de forma rudi
mentaria i es
generan informes usant formes ja desfasades i propietaries. No entro en detall de com es fa,
però observo que el punt important per l’empresa es que funcionen i donen els resultats
esperats.


Amb l’eina inicial que es proposa, i mirant la e
ntitat on treballo, concretament podira incialment:




Accedir a les Bases de Dades DB2 i popietaria de IBM AS/400.



Accedir a les Bases de Dades SQL Server y Oracle que s’usen a la web d’accès a la
entittat.



Veure els objectes de les Bases de Dades. En el IB
M AS
-
400 podria veure els arxius
físics i arxius lògics. Podria mantenir Taules (crear
-
ne, alterar
-
les afegint camps,
canviant accessos…).


Però usant l’eina es guanyaria molt de temps en la elaboració d’informes i anàlisi de dades?
Doncs si, si l’eina fos

capaç de seleccionar la informació (guardar consultes) que es vol treure i
generar sortides EXCEL i en PDF.


Per altra banda, ens preguntem ara: els SGBDR ja porten els seus exploradors (GUI) d’acces a
les Bases de Dades.
Aleshores, continua servint l’ein
a? Si, ja que és una única eina d’accé
s a
diferents arquitectures de Bases de Dades dins un mat
eix patró o especificació d’accé
s a la
informació: JDBC.


Però amb l’eina de mercat JDBC Manager presentada en el punt anterior no en tenim suficient?
Doncs no.
Primerament, l’eina ja no té versió independent actualitzada (última del 2004) i sols
implementa part de la potencia de l’especificació JDBC i de la interface DatabaseMetaData.

I
sembla que no funciona per a qualsevol Base de Dades Relacional.





1.5 Eine
s de treball



1.5.1 Entorn proposat



Pág.
15

de
94

Es detalla a continuació les eines (software) emprat per a realitzar el projecte. S’especifica
alguns detalls d’instalació i a on estan disponibles. Destacar la importància en la mesura del
pos
s
ible d’usar versions ll
iures. Per la finalitat del projecte és més que suficient.. Altrament, s’ha
emprat com a base el sistema operatiu Windows XP tot i que es posible usar Linux.


JavaSE
-

JDK (Java Development Kit)

Entorn de Desenvolupament en Java que inclou el JRE (Java Ru
ntime Environment)). Inclou
utilitats
command
-
line

de desenvolupament. S’ha instalat la versió
Java SE
-

JDK 6u
2

(la
recent). Java SE ve de Java Standard Edition. Hi ha la JAVA EE (Enterprise Edition) pero que no
es necessari pels objectius del projecte.

Es pot trovar a
URL:

http://java.sun.com/javase/
. Destinació instalació: “c:
\
Archivos de
programa
\
Java”.


IDE Eclipse

Entorn de desenvolupament lliure

potent i versàtil. Prové d’IBM. Es poden instalar sota ell
multitud de plugins que afegeixen mils de funcionalitats (UML, bases dades, …)

S’ha instalat la versió
Eclipse SDK 3.3
. Es pot trovar a URL:
http://www.eclipse.org/



Entorn alternatius lliures:



NetBeans IDE 6

(URL
:
http://www.netbeans.org/
) .
Prové de Sun. Entorn integrat que ja
inclou tot el necessari per realitzar aplicacions empresarials i aplicacions web.



Oracle Jdeveloper 10g

(v10.1.3.2 Build 4066) (Revisió: gener’07
) (URL:
http://www.oracle.com/technologies/java/index.html
)


Sistemes Gestors Bases de Dades Relacionals (SGBDR)


S’ha instal.lat les versión gratuites limitades de les versions comercila
s complertes.

Convé al instalar anotar els usuaris i passwords d’administrador asignats així com els ports que
usen.


Versions lliures de les versions comercials




DB2 Express
-
C v9.1.2


Interface aplicació inclou espanyol. Es pot trovar a:
http://www
-
306.ibm.com/software/data/db2/express/
.

Documentació útil de DB2 (manual online:
Centre d’informació de la Base de Dades
IBM DB2 per a Linux/Unix/Windows.

Es pot trovar a:
http://publib.boulder.ibm.com/infocenter/db2luw/v9//index.jsp

.



Oracle Database 10g Release 2 Express Edition for Microsoft Windows


IEs pot trovar a:
http://www.oracle.com/technology/software/products/database/xe/htdocs/102xewinsoft.ht
ml


S’ha baixat la versió Universial (Multi
-
Byte Unicode). Interface aplicació inclou espanyol.



Microsoft SQL Se
rver 2005 Express Edition SP2

Es pot trovar a:
http://www.microsoft.com/downloads/details.aspx?familyid=31711D5D
-
725C
-
4AFA
-
9D65
-
E44
65CDFF1E7&displaylang=es
. Interface en Espanyol. Publicació:
28
-
feb
-
2007.


Versions lliures


Pág.
16

de
9
4



MySQL v5.0.41

Es pot trovar a
http://dev.mysql.com/downloads/mysql/5.0.html
.


Conectors JDBC
(Drivers)




IBM DB2 Driver for JDBC and SQLJ (Driver de Tipus 4)

Es pot trovar dins apartat DB2 Clients and Development Tools de la pàgina central de
DB2 Express
-
C. Es de
Tipus 4
.i implementa JDBC 3.0.



Oracle Database 10g Release 2 (10.2.0.3) JDBC Driver
s


S’ha escollit
JDBC Thin for All Plataforms:
ojdbc14.jar

(classes for use with JDK 1.4 and
1.5)
.
Es pot trovar a:
http://www.oracle.com/technology/tech/java/sqlj_jdbc/index.html
. Es
de
Tipus 4

I implementa
JDBC 3.0
.



MySQL Connector Java v5.0.6
.

Es pot trovar a:
http:/
/dev.mysql.com/downloads/connector/j/5.0.html
. Es de
Tipus 4

que
implementa
JDBC 3.0
.



Controlador JDBC de Microsoft SQL Server 2005 v1.1.1501.101

(Publicació: 02
-
feb
-
2007)

Es pot trovar a:
http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=6d483869
-
816a
-
44cb
-
9787
-
a866235efc7c

Es de
Tipus 4

que implementa
JDBC 3.0
.


Tots son drivers de Tipus 4. Una forma que J
ava els reconeixi es posar l’arxiu .jar de cada driver
a la carpeta C:
\
Archivos de programa
\
Java
\
jre1.6.0_01
\
lib
\
ext . Hi ha entre d’altres (els noms en
si no importen):





sqljdbc.jar

per a Microsoft SQL Server 2005.



mysql
-
connector
-
java
-
5.0.6
-
bin.jar

per

a MySQL.



ojdbc14.jar

per a Oracle 10g



db2
jcc
.jar

per a IBM DB2.


Eines adicionals lliures




Oracle SQL Developer v1.1 Patch 3 (v1.1.3.27.66)

(Revisió: Maig 9, 2007)

Es pot trovar a:
http://www.oracle.com/technology/products/database/sql_developer/index.html

Eina
gràfica per a desenvolupament Bases de Dades. Es pot visualitzar els objectes de la
Base de Dades, ejecutar sentències SQL, editar/debugar sentències PL
/SQ.

Instalació: Descomprimir en un directori destí i executar sqldeveloper.exe. Cal indicarli
lloc on està instalat el JDK. Nota: Segons documentació requereix jdk 1.5 però s’ha
executat sota jdk 1.6u1.



Microsoft SQL Server Management Studio Express SP2
Eina d’administració de la
BD.

Es pot trovar a:
http://www.microsoft.com/downloads/details.aspx?familyid=6053C6F8
-
82C8
-
479C
-
B25B
-
9A
CA13141C9E&displaylang=es
. Interface en Espanyol. Publicació:
17
-
feb
-
2007.



MySQL GUI Tools Bundle for 5.0 r12

Eina gràfica per MySQL.
Interface en Inglés. Es pot trovar a:
http://dev.mysql
.com/downloads/gui
-
tools/5.0.html



1.5.2 Entorns alternatius

Pág.
17

de
94


Podria usar
-
se un sistema operatiu completament lliure: Linux. Els IDE de java tenen versió per a Linux.


IDE alternatius


NetBeans 6

(
http://www.ne
tbeans.org/
)

Entorn de desenvolupament lliure

potent i versàtil de la propia Sun. Aquest, a diferencia
d’Eclipse, ja.Integra utilitats accés a Bases de Dades, servidor web… Té també versions per a
Windows i Linux.





1.6 Estructura documentació


La do
cumentació del PFC JDBC DatabaseMetaData s’ha separat en varis apartats que es
centren en:




Especificació de Requeriments

Es dona informació del que fa l’aplicaicó (funcionalitats) i requeriments no funcionals
(elements necessaris per l’aplicació).



Concep
tes sobre Base de Dades i Java JDBC

Es el complement dels Requeriments. Es donen una sèries de definicions sobre
Terminologia de Bases de Dades i de Java JDBC com a model d’accès als diferents
sisemes gestors de Bases de Dades.




Casos d’ús

Es dóna exemples

d’usos de l’aplicació.



Disseny i Implementació

Es dona detalls del disseny i montatge dels elements de l’aplicació com poden ser definir
paquets, classes i model de dades. Es dona informació sobre la implementació del
paquet d’accés als gestors (utilitats
.jdbc)



Proves

Es pretèn donar algunes proves ilustratives del funcionament de l’aplicació



Apèndixs

Esta format per un resum d’acrònims/definicions i per un breu manual de l’aplicació.


Pág.
19

de
94


2



Anàlisi de requeriments


La finalitat
d’aquest capítol
es definir de la forma més precisa possible el que es vol
desenvolupar mitjançant l’Especificació de Requeriments de Software (SRS). El software que es
preten construir ha de sati
sfer les necessitats que es vol cubrir i aquestes han d’estar
especificades aquí.


Dir que els requeriments són la peça fonamental del desenvolupament del software i forma part
del cicle de vida de tot projecte. Amb ells, per exemple, es podrá:




Plan
tejar

el projecte i els recursos que s’usarà en ells (personal, màquines, software).



Evaluar els costos i temps



Planificar les proves



2.1 Previ requeriments


Per tal de poder entendre els requeriments es imprescindible efectuar una sèries de definnicions.
Aqu
ests seràn d’ajut per la resta d’apartats.


Es recomana en aquest punt també efectuar lectura de les definicions i conceptes necessaris per
entendre aquest capítol i que es pot trobar en el capítol de conceptes de Bases de Dades i Java
JDBC. Aquí es prese
nta de forma sintètica.


2.1.1 Definicions i acrònims


Es dona un conjunt d’acrònims i definicions necessaris per entendre millor el present capítol.


Acrònims




SRS:

Especificación de requerimientos software.



PC
:

ordenador personal.



SSOO
:

sistemas operativ
os.




API:

Application Programming Interface
Interficie de programació d’aplicació



ANSI:
American National Standard Institute



JDBC:

Java Database Connectivity



ODBC:
Open DataBase Connectivity



RDBMS

:
Relational Data Base Management System (Sistema Gestor
de Bases de
Dades Relacional)



SQL
: Structured Query Languaje (Llenguatge de Consulta Estructurat)



SDD:

Descripción de diseño software.




SW
:
Software.



URL:

Uniform Resource Locator (Localitzador Unoforme de Recursos)



XML:

e
Xtensible Markup Language (
Llen
guatge de marques extès)

Pág.
20

de
94


Definicions




Bases de dades relacionals

La informació s’estructura en relacions vistes de manera simple com taules composades
de registres (files) i de camps (columnes).



SQL
-

Llenguatge de Conulta Estructurat (Structured Query La
nguage)


Es un llenguatge declaratiu d’accés i manipulació de Bases de Dades relacionals. Es un
estándar ANSI.. Malgralt ser un estándar, hi han moltes versions. Els SGBDR solen
afegir extensions o particularitzacions al SQL estàndard.



Sentencia SQL

Ordre
s
-
Comandes en SQL que interaccionen amb una BD (consultes, actualitzacions....)



Taula

Conjunt de dades relacionades vista com una representació en camps (columnes) i
registres (files)



Vista

Consulta SQL d’una o varies Taules vista com una Taula.



Index

Ús d
’una o més columnes d’una Taula per a permetre ràpid accés a files d’una taula.



Claus Principals, Claus Forànees

Clau Principal es conjunt de camps (o camp) que identifica un registre unívocament.
Clau forànea son camps que s’usen com a claus principals d’
una altre taula.



Procediments Emmagatzemats

Rutines que es guarden en el gestor usables per les aplicaciones.



2.1.2 Referències


Les referències que s’usan es pot trobar al final de

la memòria
.



2.1 Descripció general


2.1 Perspectiva eina


L’
eina que e
s vol desenvolupar es completament independent en el sentit que no s’integra a cap
eina superior que la inclogui. Per tant, aquest es pot posar junt amb un mínim necessari com
disposar del JRE de Java, un Sistema Operatiu i els SGBR amb els conectors de co
nexió.


2.2 Funcionalitat de l’eina


Amb l’ús de l’especificació JDBC de Java i p
er tant usant llenguatge Java,
es realitza una eina
que permeti funcionalitats com:




Definir conexions a Bases de Dades en funció de la parametrització dels drivers

Caldrà Esp
ecificar paràmetres de cada conexió: Ports (listeners

o oients els quals reben
peticions
), usuari, passoword….



Mostrar les Bases de Dades de sistema i d’usuari.

Pág.
21

de
94



Mostrar definicions de taules, vistes i indexos de sistema i d’usuari. Veure integritat
referen
cial (claus primàries i claus forànees).
Veure els procediments emmagatzemats i
llurs paràmetres d’entrada I sortida.



Mostrar autoritzacions operacions sobre Taules i camps.



Executar Sentencies SQL que l’usuari desitji (consultes, actualitzacions …)


2.3 R
estriccions


El sistema està exclusivament fet en Java i usa l’especificació JDBC per intereccionar amb els
gestors de Bases de Dades. Al seguir l’especificació JDBC, pot (i de fet passa) que es ressisteixi
el seu funcionament sobre determitats gestors (qu
e malfuncioni o no doni els resultas esperats).
En quest cas, un culpable cal trobar
-
ho en que els drivers dels gestors no implementen
adecuadament l’especificació JDBC. Es pot important aleshores saber escollir els conectors
adequats.



2.4 Suposicions i
dependències


El sistema es prova en base a unes versions de software (especificats en introducció). Es evident
que aquesta dependència es màxima en el sentit que no es pot canviar a la lleugera determinats
components software. Un exemple clar i dràstic es

un canvi de Sistema Operatiu: malgrat Java
sigui portable, és ben segur

a la pràctica que pot haver
-
hi quelcom que deixi de
funcionar

de la
forma esperada.


2.5 Evaluació previsible software


El software que es realitza és un punt d’entrada a tot un amplí
ssim món de la gestió de Bases de
Dades. L’eina cobreix la part de visualització d’objectes peró deixa apart una rigurosa gestió dels
objectes amb els quals es pugui treballar

(malgrat que una part es pot fer introduïnt Sentencies
SQL una a una però és mil
lor visualment)
.



2.3 Requisi
ts específics


Una aproximació dels requisits específics ens porta a dividir
-
ho en requisits funcionals i no
funcionals.


2.3.1 Requeriments funcionals


Es descriu el que el sistema (eina o software) ha de fer. En cap cas,
aquí no s’explica com es fa:
algoritmes i lògica (disseny e implementació).
Solament ens destaquen les funcionalitats.


2.3.1.1 Requisits

de Conectors (drivers) i Conexions JDBC


Fa referencia al tractament dels drivers proporcionats pels fabricants dels
diferents SGBDR que
implementen especificació JDBC.
També a les conexions creades en base als drivers.




Manteniment de Conectors (drivers) JDBC a SGBDR

Ha d’existir un arxiu de conectors JDBC en forma de claus
-
valor que ens indiqui per
cada sistema gestor
de Bases de Dades (
dbVendor
) les parelles

Pág.
22

de
94



(nom sistema o dbVendor , cadena driver | format cadena conexió)

on el caràcter | separa les cadenes.

Cal que l’arxiu estigui en estàndard de dades XML.
Les cadenes driver i conexió anirán
separats per |.



Man
teniment de Conexions JDBC a SGBDR

Ha d’existir un arxiu de conexions JDBC en forma de claus
-
valor que ens indiqui per
cada nom de conexió creat al sistema gestor de Bases de Dades (
dbVendor
) les parelles
(nom conexio

; propietats conexio) on propietats co
nexió está format per ristres
clau=valor separats per |.
En concret.sistema i cadenes driver i cadena conexió.
Cal que
l’arxiu estigui en estàndard de dades XML..


2.2.1.2 Requeriments d’Informació objectes de la Base de Dades


Un cop conectats amb una Ba
se de Dades, el sistema mostra els objectes relacionats amb la
conexió. Així mostra:




Informació de Driver i conexió a la Base de Dades

Ha de proporcionar
-
nos informació respecte al Driver (nom, versió,
minor
-
major

versió) i
respecte a la Base de Dades (no
m BD, versió Base Dades,
minor
-
major

versió).

Ha de proporcionar
-
nos informació URL de la Base de dades, el UserName (Nom
Usuari).



Informació Arquitectura Bases de Dades

Hauria d’incloure com a mímin:

o

Informació sobre els Termes que s’usen per: Catàleg,
Esquema, Separador
Catàleg, Procediment…

o

Informació sobre Tipus de Taules que s’usen.
Típicament: TABLE (Taula), VIEW
(Vista), SYSTEM TABLE (Taula de sistema).

o

Infomació mapaig complet entre Tipus de Dades del gestor de Bases de Dades i
tipus de dades de J
DBC.



Tipus SQL i seu mapeig amb Tipus JDBC


o

Infomació de
elements de suport Base de Dades

tal com:
Nivell SQL ANSI92
amb què es pot treballar, tipus gramàtica SQL, suport supresió per
posicionament, actualitzacions en Batch (procés per lots), suport a s
tored
procedures



Informació Límits Base de Dades

Hauria d’incloure com a mínim informació límits operacions sobre:

o

Tamany màxim fila (registre) Informació

o

Tamany màxim sentència SQL.

o

Númeró máxim de conexions que suporta la Base de Dades.

Pág.
23

de
94

o

Número de camps q
ue suporta una Taula.

o

Número de Taules màxim permès en una sentencia SQL.



Informació Objectes de Base de Dades

Ha de mostrar informació sobre:

o

Catàlegs i Esquemes de la Base de Dades. Obtenció dels atributs.

o

Taules, Vistes, Indexs i Procediments emmagatze
mats.

o

Claus primaries i claus forànes (tant importades com exportades) respecta a una
Taula.

o

Detall de camps de les Taules i Vistes.

Cal especificar ordre, tipus de dades que emmagatzema, valors per defecte…

o

Detall de permisos sobre Taules, Vistes i camp
s taules o vistes.

o

Detall de paràmetres entrada i sortida dels procediments emmagatzemats.

Caldria efectuar una distinció si són objectes de l’usuari o bé formen part interna del
gestor de Base de Dades.



Exemple informació Indexs Taula



Lloc introducció
sentencies SQL

Permeti introduir qualsevol sentència SQL válida (SELECT, UPDATE...) contra la base
de dades.



Exemple execució d’una sentencia SQL



2.3.2 Requeriments no funcionals


2.3.2.1 Requeriments de portabilitat programa i de dades


Ens interess
a un llenguatge que permeti la portabilitat de programa i per tant els programes
funcionin tant si s’executa sota el sistema operatiu Windows com per exemple en Linux. El
llenguatge en qüestió es Java. La portabilitat seria efectiva amb petits retocs.


Pág.
24

de
94


F
ont:

http://www.jorgesanchez.net/programacion/Java.pdf



Pel que fa a les dades, està agafant pes XML com a mitjà de portabilitat

de les dades.

XML é
s un
estàndard acceptat i pot ser usat p
er milliorar la compatibilitat entre aplicacions. Permet
l’intercanvi d’informació entre aplicacions (o mòduls).

Per tant, en el paquet de funcions JDBC
DatabaseMetadata (UtilsJDBC) les funcions retornen també valors en format XML.





2.3.2.2 Requeriments d’usabilitat


El software va encarat tan a administradors com a usuaris en general. Això no te més problema
ja que a tota conexió a una Base de Dades mostrarà els objectes (taules, vistes....) al qual té
accés un usuari en co
ncret.
Així si és un usuari administrador, es evident que tindrà accès a tots
els objectes.
En tot sistema sol haver una jerarquia d’accessos.


El programa s’acompanya d’una Ajuda en format HTML de les prestacions del programa i
accessibles directament de
s del programa. També hi ha la versió escrita.


2.3.2.3 Requeriments ergonòmics


Un requeriment ergonòmic de pes és la inteface amb l’usuari (GUI


Graphic User Interface) ja
que és l’única forma que l’usuari interactua amb el sistema. La interface ha de c
omplir:




Disposar de menú de navegació part superior i d’una Barra d’eines amb les funcionalitats
més principals per a un accés ràpid.



Els objectes de la BD han de ser desplagats en forma d’arbre i estar clarament
identificats.



Ha de disposar d’un lloc per

a sentencies SQL


El paquet de software que es basa per a contruir el GUI es ús del paquet Java Swing que és un
estàndard.


2.3.2.4 Requeriments d’Interface


Document

XML

Objectes

Java

Pág.
25

de
94

L’eina interactua principalment amb els gestors de Bases de Dades. El programa té fons
d’entrad
a en formats de dades XML (estándar d’intercanvi dades) i formats propietaris de Java
(array strings). Per interrogar la Base de Dades se so
l

usar protocols de xarxa com a medi de
transport

de la
informació. El tipus d’informació és sempre sobre dades i m
etadatos sobre la
Base de Dades.


2.3.2.5 Requeriments de desenvoltura


El programa ha de ser de resposta preferentment ràpida però que no arriba a ser ni molt menys
crític. Destinat preferentment com una eina de consulta i no com a eina de
producció.
Tam
mateix, hi ha consultes que de per si són més complexes (com consultes integritat
referencial) i per tant no es pot demanar respostes inmediates.


Els recursos que fa servir el programa depen molts cops de les consultes que es facin (de la
seva complexitat
). Cal ser conscients del tipus consultes que es fan.



Pág.
27

de
94


3


Conceptes sobre Bases de Dades i Java
JDBC


Aquest capítol està destinat a definir conceptes bàsics necesaris

sobre Bases de dades per
després arribar a Java JDBC. Es pot englobar en una explicació més detallada de les definicions
i conceptes necessaris en Anàlisi de Requeriments. Per tant, el que s’explica son conceptes que
s’usen en l’aplicació.


Cada final a
partat de cada apartat es descriu o s’intenta justificar mínimament en què s’usa els
conceptes que es detallen aquí.



3.1 Conceptes sobre Bases de Dades


Es donen definicions referents a Bases de Dades, de general a elements que la formen.


3.1.1 Base de
Dades i Sistema Gestor de Base de Dades


Una
Base de Dades

(BD) és una colecció de dades emmagatzemades de fàcil accès. Les
Bases de dades relacionals (BDR)
és un model de Bases de Dades on la informació

s’estructura en relacions vistes de manera simple co
m taules composades de registres (files) i de
camps (columnes). I precisament un
Sistema Gestor de Base de Dades (SGBD)

o
Manejador
de Bases de Dades (DBMS = Data Base Management System)

és el software encarregat de
mantenir les dades d’una Base de Dades.


El model relacional es basa en el concepte matemàtic de relació (degut a Codd) que gràficament
es representa mitjançant una taula. Codd va usar la terminologia matemàtica de teoria de
conjunts i lògica de predicats.


Destacar que el model relacional é
s un model lògic de dades. És a dir, oculta les característiques
de la representació física. Informalment, que guardi la informació físicament com cregui
convenient mentres retorni resultats de la forma esperada i eficient. O sigui, per un usuari, un
SGBDR

es percep com un conjunt de taules.


Hi han models que ajuden a dissenyar el
model de dades

d’una Base de Dades. Un model
d’exemple són els diagrames o model Entitat
-
Relació (
E
-
R

Entity relationship) on es defineixen
entitats (objectes), relaciones entr
e entitats i atributs de cada entitat. En les relacions cal definir la
Cardinalitat de les relacions

(relacions un a un, d’un a molts, de molts a molts), Això va
intimament lligat per exemple a les restriccions de clau foranea que es pot definir en una Bas
e de
Dades.


Els objectes bàsics d’una Base de Dades són:


Taula

Pág.
28

de
94


Una
Taula

d’una Base de Dades es pot veure com un conjunt de dades que representen una
informació relacionada. Informalment es pot veure com una fulla de càlcul.

Una taula es composa de:




C
amps:

Son les columnes.

És la unitat básica d’una Taula. Cada columna té associat un tipus de dades (definim
el tipus de dades que es vol emmagatzemar i propietats associades).



Registres:

Son les files.

Representen les dades. Cada columna del registre
está associat amb la columna
(camp) que la defineix.


El Tipus de dades d’una columna indicará que totes les dades emmagatzemades en aquella
columna dels registres hauran de ser del mateix tipus. Cada gestor defineix un conjunt de
Tipus de Dades que soport
a. Al definir
-
los caldrà especirficar si s’acepta la característica de
valors nuls (NULL)..


Clau principal



Un concepte important en una Taula es la definició de
clau principal o primaria (primary
key)
com el camp (o camps) que permeten identificar i l
ocalitzar un registre de forma ràpida.
Es pot veure com una restricció que garantitza que cap taula té files duplicades i que no
poden ser NULL.. En ell s’hi sol definir si s’ordenen de forma ASCendent o DESCendent.


Índex


Un
índex

es una carácterística
de les Bases de Dades que permet ràpid accés a les files o
registres d’una Taula o fitxer. Els índexs són creats
usant un o més columnes d’una Taula
.

Un índex es pot veure informalment com un índex d’un llibre de la forma de parelles
d’elements: element a

indexar i la posició a la Base de Dades.

Els índexs convé usarlos sobre aquells camps sobre els quals es fan freqüents búsquedes
Ocupen molt menys que les dades en si. Es solen construir usant arbres de cerca B, B+ o B*.

Fer un abús d’índexs el que comp
orta es més lentitud general de la Base de Dades. Cal
trobar un equilibri.


Vista


Una
vista

d’una Base de Dades és el resultat d’un consulta SQL de zero, una o varies taules.
Les
vistes

tenen la mateixa estructura que una Taula: files (resgistres) i colum
nes (camps).
L’única diferència es que una
Vista

és una definició (es guarda unicament com s’obtenen les
dades) a diferencia de les Taules que si són les dades en si.

En una vista igualment es poden fer operacions de consulta, insercions, actualitzacions i

borrats.


Procediments Emmagatzemats


Els
procediments emmagatzemats (Stored Procedures)

són procediments o rutines
disponibles a les aplicacions que accedeixen a les Bases de Dades. Estan emmagatzemats
físicament a la Base de Dades. Tenen acces directe
a les dades (rapidesa) i sols es
Pág.
29

de
94

necessari enviar resultats de la petició. Un possible problema es que solen estar escrits en
llenguatges propietaris de la Base de Dades com exemple PL/SQL per a Oracle.


Un ús típic pot ser els processos de validació de d
ades o mecanismes de control d’accés. De
fet, molta part de la lógica de les aplicaciones es posen en stored procedures que aporta
avantatge la rapidesa pero com a incovenient la dependència del gestor.


3.1.2 SQL


SQL (Structured Query Language o Llengua
tge Estructurat de Consultes) és el llenguatge més
habitual per a construir consultas a Bases de Dades relacionales. Aquest estàndard està
implementat pels principals motors o SGBDR (Sistemes de gegstió de bases de dades
relacionals).


Revisions actuals AN
SI SQL

Al 1992 apareix SQL
-
92 (SQL2), al 1999 apareix SQL:1999 (SQL3)



Revisions ANSI SQL

Alias

Nom

Any

Comentaris

SQL
-
87

SQL
-
86 | SQL
-
1

1986



SQL
-
89

1989


SQL2

SQL
-
92

1992


SQL3

SQL
-
1999

SQL:2003

1999

2003

Al 1999, s’introdueix expressións reg
ulars, consultes recursives,
triggers i algunes característiques orientades a objectes

Al 2003, s’Inclou alguna operativa XML…


Terminologia





Taula

(Fitxer)



Columna

(Camp)


Parts principals SQL




SQL Data Manipulation Language (DML).

Sentencies per a con
sultar (SELECT), insertar (INSERT INTO), actualizar (UPDATE) i
borrar (DELETE) dades.



SQL Data Definition Languaje (DDL)

Sentencies per a crear taules (CREATE TABLE), canviar una taula (ALTER TABLE),
eliminar una taula (DROP TABLE), crear indexs (CREATE I
NDEX), borrar indexs (DROP
INDEX)



SQL Data Control Language (DCL)

Sentències sobre privilegeis. Exemple: GRANT, REVOKE



SQL Transction Control (TCL)

Sentencies transaccionals pel maneig de sentències DML. Exemples: COMMIT,
ROLLBACK, SET TRANSACTION, SAVEPOI
NT…


3.1.3 Integritat de Dades. Integritat Referencial. Restriccions.


La integritat referencial (referential constraint) persegueix protegir la Integritat de les Dades. Es
vol evitar que apareguin dades incorrectes, repeticions, dades perdudes …


Pág.
30

de
94

Una
rest
ricció (constraint)

que es pot definir sobre una columna o grup de columnes es el
concepte de
clau forànea

que conté un valor (valors) que fa referencia a una fila o registre d’una
altre taula.


Algunes restricciones són:




Restriccions de clau principal (
Integritat d’entitat)

Una restricció de clau principal garantizar que no s’escriguin valors duplicats ni nuls en
les columnes especificades (cal garantir l’exclusivigtat). Exemple: una columna
ID_Article identifica els detalls (camps) d’un Article.



Restri
ccions de clau externa (foreign keys) (Integritat Referencial)

Es una forma de garantir la integritat referencial en les tables que es relacionen. Es a dir,
no es pugui afegir un columna .a una taula sense que aquesta no estigui com a clau
primaria d’una t
aula.



(Extret de: Introducció a Oracle de
http://www.lcc.uma.es/~esc/docenciabd/Tema%202%20Relacional.pdf
)


Quan es defineixen
claus forànees

cal definir també les accions
que cal fer quan s’intenta borrar
o actualitzar una fila d’una taula on hi ha les claus afectades (clau foranea d’una Taula i clau
primaria de l’altre taula).


Per exemple, en la taula podriem definir que fer (actualització i borrats en cascada) si canviem

de
la taula departaments el valor 30 por 130 o bé borrem el departament 30. Doncs bé, pel primer
cas caldrá canviar en cascada de la taula d’empleats els 30 per 100 i el el segon cas
desapareixeran tots els empleats del departament 10.(cada empeleat pert
any a un departament).


En MySQL es defineix les claus forànes al crear la taula o al alterar taula:


ALTER TABLE <table identifier>


ADD [ CONSTRAINT <constraint identifier> ]


FOREIGN KEY ( <column expression> {, <column expression>}... )



REFERENCES <table identifier> [ ( <column expression> {, <column
expression>}... ) ]


[ ON UPDATE <referential action> ]


[ ON DELETE <referential action> ]


CREATE TABLE table_name (


id INTEGER PRIMARY KEY,


col2 CHARACTER VARYING(20)
,


col3 INTEGER,


...


CONSTRAINT col3_fk FOREIGN KEY(col3)

Pág.
31

de
94


REFERENCES other_table(key_col) ON DELETE CASCADE,


... )


3.1.4 Gestors de Bases de Dades


En el projecte es proven els Gestors de Bases de Dades ( a la introducció hi ha definits
les
versions que s’han usat):




MySQL



Oracle



SQL Server



DB2



Microsoft Access


Queda fora de l’abast entrar en els detalls interns de cada gestor, és a dir, la seva arquitectura.
El que ens importa en el projecte es usar JDBC com a única forma única per a to
ts ells d’obtindre
la informació que ens interessa. A nivell general tots permeten definir els conceptes vistos fins
ara (es la base). Es important recalcar que
exclusivament estem tractant Bases de Dades
Relacionals


3.1.5 Usuaris de Bases de Dades


En t
ota Base de Dades es té usuaris amb més privilegis que altres. Especialment el que té accès
a tot el sistema són els usuaris administradors. Se solen definir nivells d’usuaris en el sentit de
permetre solament un subconjunt d’operacions.


Es pot estabilir

restriccions sobre comuntment Bases de Dades, Taules i Columnes. Les
instruccions SQL específiques son GRANT i REVOKE.


3.1.6 A on s’usa els conceptes de Base de Dades en el projecte?


Aquí ens preguntem, i on s’usa tot això? Doncs bé en el programa:




Al

efectuar una conexió a una Base de Dades doncs saber que el que estem veient son
precisament els objectes d’una Base de Dades i per tant Taules, Vistes, Índexs i
Procediments Emmagatzemats.



Que al veure les propietats d’una Taula doncs estem veient quines

són les claus
primaries, quins camps composa una taula, quines restriccions d’integritat s’hi
defineixen, si hi ha claus forànees…



Que al efectuar consultes o actualitzacions a una Base de Dades, estem usant
precisament SQL.



Al conectarse a una Base de D
ades es important el nivell de l’usuari ja que apareixerà
diferents conjunts d’objectes segons el nivell de l’usuari.



3.2 Conceptes sobre Java JDBC



3.2.1 Introducció



JDBC

es acrónim de
Java Database Connectivity
. JDBC és defineix alternativament:

Pág.
32

de
94




JD
BC és una inteface i plataforma independent entre Bases de Dades Relacionals i
Java
.



JDBC és una API per accés a Bases de Dades
empresarials

en Bases de Dades
relacionals (com per exemple Oracle, MySQL, SyBase, PostgreSQL, DB2…) usant SQL.


La
API JDBC

of
ereix una forma homogènea d’accés a diferents SGBDR. Les intefaces JDBC
defineixen (no imp
lementen
) els accesos a les Bases de Dades en base a especificació
concretes. Les implementacions d’aquestes ens permetran ja accedir
-
hi per a realitzar
-
hi tot tipus
d’operacions usant SQL.


Al permetre Java i JDBC realitzar aplicacions a Bases de Dades independents de la plataforma i
del SGBDR, vol dir que una mateixa aplicació funcionaria sobre una Base de Dades MySQL o
Oracle per esmentar
-
ne algunes i a més sota Wi
ndows o Linux. Desgraciadament, es demostra a
la pràctica que així és però amb retocs concrets a cada plataforma.



3.2.2 Drivers JDBC


Amb el
driver o controlador JDBC

ens permetrà conectarnos a una Base de dades.

Per desgràcia, dependrà molt del driver

i com estigui fet i de les versions sobre els resultats de
les diverses consultes que se li fagin. La teoria de la interface que va bé per un driver resulta que
no funciona per un altre.




API’s Java (Font: http://www.itver.edu.mx/comunidad/material/tal
lerbd/apuntes/2.4_Txt.htm)


Tipus de drivers




Tipus 1. JDBC
-
ODBC bridge plus ODBC driver

Permet accedir a fons ODBC.
El pont JDBC
-
ODBC implementa operacions JDBC
traduintles a operacions ODBC per a que aquest accedeixi a la Base de Dades. A cada
maquina c
lient s’ha de configurar previament la font ODBC.

Conté codi natiu. S’inclou en els JDK.

Pág.
33

de
94



Tipus 2. Native
-
API partly
-
Java driver.

Están escrits en Java i codi natiu. Necesiten de configuració previa com Tipus 1.
Converteix crides JDBC a crides propies de ca
da SGBDR.



Tipus 3. JDBC
-
NET pure Java driver

Escrit en Java pur. Usa un protocol independent de la Base de Dades per a comunicar
les peticions a un servidor que les tradueix a un protocol específic de la Base de Dades.



Tipus 4. Native
-
Protocol pure Java Dr
iver.

Escrits en Java pur (independent de la màquina en que s’executi). Son com Tipus 3 pero
sense el pas intermig. Permet una comunicació directa. Es converteixen les crides JDBC
al protocol de xarxa natiu usat per cada SGBDR. No es necessari intermediari
s per
parlar amb el servidor


Es recomana l’ús de drivers de tipo 3 o 4 per a accedir a les Base de Dades (el solen
subministrar ja els SGBDR comuns). Els Tipus 1 i 2 podrien considerar
-
se solucions provisionals
fins que apareixin els de Tipus 3 o 4.


Com
a important:




Els paquets java.sql i javax.sql defineixen la API JDBC. S’usa el llenguatje SQL.



En les distribucions JDK es dona un controlador Tipus 1 (no recomenable usar).
Tammateix, els diferents SBBDR ofereixen drivers optimitzats de Tipus 3 o 4.




Tipus 1: Pont JDBC
-
ODBC


Tipus 2: Java Binari



Tipus 3: Java Protocol independent




Tipus 4: Java Protocol / Natiu


3.2.3 API JDBC


Pág.
34

de
94

La API JDBC proporciona interfaces i clases per accedir i processar dades usualment d’una BD
relacional.


Paquets
importants:


Package

Descripció

java.sql

Defineix la API JDBC

javax.sql

Es extensió extandard JDBC. Proporciona funcionalitat d’un fons de dades (objecte DataSource) i
agrupació de conexions (connection pooling).


Package java.sql



Una descripció sego
ns la funcioanlitat es:



Per a fer conexions a Bases de Dades usant DriverManager

Objecte

Tipus

Descripció

DriverManager

clase

Per a fer una conexió a un driver

SQLPermission

clase

-


Driver

interface

Aquesta interface l’han d’implementar tots els f
abricants de drivers
JDBC.

DriverPropertyInfo

clase

Propietats d’un driver JDBC



Per a enviar sentencies SQL a la Base de Dades

Objecte

Tipus

Descripció

Statement

interface

Objecte usat per executar sentencies SQL estàtiques i returnar els
resultas
que produeix.

PreparedStatement

interface

Objecte que representa a sentencies SQL precompilades.

CallableStatement

interface

Per executar SQL stored procdueres (procediments emmagatzemats)

Connection

interface

Una conexió (sessió) a una Base de Dades co
ncreta.

Savepoint

interface

Representació d’un savepoint, que és un punt dins de la trnsacció
actual que es pot referir dins del mètode Connection.rollback.



Per a recuperar i actualitzar els resultats d’una consulta (query)

Objecte

Tipus

Descripció

ResulSet

interface

Una Taula de dades que representa un cojunt de resultats generats
usualment per l’execució d’una sentencia de consulta a una Base de
Dades.



Per a mapetjos de tipus de dades SQL cap a classes o interfaces de Java

Objecte

Tipus

Desc
ripció

Array

interface

Per a representar/Mapejar el Tipus de dades SQL ARRAY.

Blob

interface

Per a representar/Mapejar el Tipus de dades SQL BLOB.

Clob

interface

Per a representar/Mapejar el Tipus de dades SQL CLOB.

Date

clase

Per a representar/Mapejar

el Tipus de dades SQL DATE

Ref

interface

Per a representar/Mapejar el Tipus de dades SQL REF

Struct

Interface

Per a representar/Mapejar el Tipus de dades SQL STRUCT

Time

Clase

Per a representar/Mapejar el Tipus de dades SQL TIME

Timestamp

Clase

Per a
representar/Mapejar el Tipus de dades SQL TIMESTAMP

Types

Clase

Constants per als Tipus de dades SQL.



Informació Metadata

Objecte

Tipus

Descripció

DatabaseMetadata

interface

Informació respecte a una Base de Dades.

ResultSetMetaData

interface

Obje
cte que s’usa per aconseguir informació respecte als tipus i
propietats de les columnes d’un ResultSet.

ParameterMetaData

interface

Objecte que s’usa per aconseguir informació sobre els tipus i
característiques dels paràmetres d’un objecte PreparedStateme
nt.

Pág.
35

de
94



Control Exceptions

Objecte

Tipus

Descripció

BatchUpateException

clase

Excepció que indica errors durant una operació d’actualització en batch.

DataTruncation

clase

Excepció quan es trunca (DataTruncation) per acomodar una dada. En
lectures es d
ona avís (warning) i en escripures es llença excepció.

SQLException

clase

Excepció que dona informació sobre varis errors d’access a la BD.

SQLWarning

clase

Avisos sobre accesos a BD.



Package javax.sql


Es una extenció de JDBC. Ofereix funcionalitats

noves resumides en les quatre categories
següents:




Interface DataSourse:

Per a treballar amb el servei de noms JNDI (Java Naming and
Directory Interface) que permet establir conexions amb una font de dades.



Pooling de conexions:

Mecanisme que permet reut
ilitzar les conexions en lloc de crear
una nova conexió cada vegada que es necessiti. La gestió d’un pool es fa en general
transparent a l’usuari.



Transaccions distribuides:

Mecanisme que permet utilitzar en una mateixa transacció
diferentes servidors de B
ases de Dades.



Interface RowSet:

Component de JavaBean.
Es un conenidor per un conjunt de files. Al
heredar de ResultSet te la funcionalitat d’aquesta.



Interfaces

Objecte

Descripció

ConnectionEventListener

Listener events relatius a un PoolConnection.


ConnectionPoolDataSource

Representa una font de dades gestionant els pools de conexions

DataSource

Per a conexions a Bases de Dades.

Pool
Connection

Resenta una conexió que pertany a un pool.

RowSet

Suport a JDBC API per al model de components JavaBea
ns.

RowSetInternal

-

RowSetListener

Representa Oient RowSet

RowSetMetaData

Representa els Metadatos d’un RowSet

RowSetReader

-

RowSetWriter

-

XAConnection

Per a transaccions distribuides.

XADataSource

-


Clases

Objecte

Descripció

ConnectionEvent

Representa un event de ConnectionEventListener.

RosSetEvent

Representa un event generat per RowSet.


java.sql i javax.sql

L’ús de Javax.sql ja s’escapa dels propòsits del projecte i ja és més complex. Va emcaminat ja a
projectes empresarials. Aquí s’usa

java.sql. Un exemple d’ús rigurós de javax.sql en quan al
tema de realitzar conexions a Bases de Dades i sobretot en entorns de producció es usar pools
de conexions. La forma que s’usa en el projecte és més senzilla i es suficient pels propòsits que
es ma
rca el projecte.



3.2.4 Relacions entre les classes i paquets principals Package java.sql



Al establir una conexió o sessió a una Base de dades específica (inteface Connection), podem
crear 3 tipus de sentencies bàsiques:

Pág.
36

de
94




Statement (Sentència)

creada a
mb createStatement,

Permetrà executar sentències SQL sense paràmetres.



PreparedStatement (sentències preparades o precompilades)

creades amb
preparedStatement

Permetrà crear una plantilla sentència SQL amb un o varis paràmetres.



CallableStatement

(sentènci
a invocable) amb prepareCall.

Permetrà executar procediments emmagatzemats. També amb paràmetres
(PrepareCall).


Aleshores es podrá invocar en consultes (SELECT) el mètode executeQuery. Si s’actualitza
(INSERT, UPDATE, DELETE) , s’invoca executeUpdate. Els

resultats els podrem tractar amb
ResultSet.


Els gràfics que s’acompanyen representen les relacions entre els elements principals del paquet
javax.sql. El segon gràfic alternatiu està en notació o nomenclatura UML (
Unified Modeling
Language)

i OMT (
Object

Modeling Technique).



Aquí es veu la interface Statement permet executar sentències SQL sense paràmetres. La
interface PreparedStatement, que descendeix o exten Statement, s’usa per crear una plantilla
sentència SQL amb un o varis paràmetres (sentencia p
recompilada). Finalment, la interface
CallableStatement exten PreparedStatement que permetrà execugtar procediments
emmagatzemats.


Exemples


Exemple 1

Us de sentencia SQL sense paràmetres i mètode executeQuery.
Al crear una sentència li diem
adicionalmen
t que el resultat de la consulta ResultSet es de sols lectura i a més diem que sigui
sensible als canvis que es fagin mentres estigui obert l’objecte Statement.



Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE
,



ResultSet.CONCUR_READ_ONLY
);

ResultSet srs = stmt.executeQuery("SELECT COF_NAME, PRICE FROM COFFEES");


Exemple 2

Veiem la mateixa sentencia usant un SQL sense paràmetres i la mateixa usant Sentències
Preparades (paràmetres).


Statement


Stri
ng updateString = "UPDATE COFFEES SET SALES = 75 " +


"WHERE COF_NAME LIKE 'Colombian'";

stmt.executeUpdate(updateString);


PreparedStatement



PreparedStatement updateSales = con.prepareStatement(


"UPDATE COFFEES SET SALES =
? WHERE COF_NAME LIKE ? ");

updateSales.setInt(1, 75);

updateSales.setString(2, "Colombian");

updateSales.executeUpdate():


Exemple 3

Pág.
37

de
94

Donada una conexió
con
, crearem un procediment SHOW_SUPPLIERS resultat d’un join de dos
taules per SUP_ID. Es crea l’obj
ecte Statement i s’executa.


String sql = "create procedure SHOW_SUPPLIERS as select SUPPLIERS.SUP_NAME,
COFFEES.COF_NAME from SUPPLIERS, COFFEES " +



"where SUPPLIERS.SUP_ID = COFFEES.SUP_ID order by
SUP_NAME";

Statement stmt = con.createStatem
ent();

stmt.executeUpdate(sql);




Font:

JDBC 3.0 Specification (Sun) October 2001



Pág.
38

de
94


Relacions entre les diferents interfaces
-
classes (en UML
-

OMT)
(Font:
http://ww
w.itapizaco.edu.mx/paginas/JavaTut/froufe/parte21/cap21
-
4.html

)




3.2.5 Estructura interna Base de Dades segons JDBC


L’especificació JDBC veu l’estructura interna d’una Base de Dades com:



Objectes de Bases de Dades (taules, vistes, procediments…) esta
n continguts en un
Esquema (Schema)
.



Esquemes (espais de nom d’usuaris

user namespaces
-
) están continguts en un
catàleg.



Catàlegs (Particions de Bases de Dades, Bases de Dades) estan continguts a un
Servidor de Bases de Dades( com Oracle, MS SQL… )

Des
graciadament ja en el punt inicial de catàlegs i esquemes ja trobem distincions segons el
gestor de Bases de Dades. I ja en general trobem diferent semàntica en l’ús del mateix JDBC
API. Per exemple, per Oracle un esquema es el nom de la base de dades pero

per MySQL és el
Catàleg..



Pág.
39

de
94


Vista segons JDBC de la estructura interna d’una BD (Font:
http://jguru.com/faq/view.jsp?EID=1183
)


3.2.5 Metadatos


Per parlar de Metadatos, la API Java usa el terme Meta
D
ata ja que Java es sensible a minúscules
-
majúscules, però en aquí usem metadata (es escriure ja el programa o bé és explicar concepte).


L
es dades i els metadatos són punts molt importants en aplicacions empresarials. Usem
Metadatos per donarnos “
dades sobre dades”
. En aquest sentit, es pot veure com els tipus de
dades i descripció del que conté les dades. Així per exemple, donat un resultat

d’una consulta
d’una Base de Dades podrem saber analitzant el resultat (seus metadatos) quantes columnes té,
tipus dades… del resultat (la informació està implícita en el resultat).


I JDBC treballa amb les dades i els metadatos d’una Base de Dades. Cada
Base de Dades té
moltíssims metadatos i per complicar
-
ho més cada Base de Dades té els seus i precisament
JDBC el que fa es
mapejar
-
los

amb l’us d’una API comuna. Ja s’encarreguen els drivers de
complir aquesta API comuna ja que han d’implementar
-
la si vol
en ser compatibles amb la norma
que imposa l’especificacio JDBC Java.


La programació JDBC i la programació JDBC Metadata es diferencien en què la primera estem
solament interessats en resultats de consultes però en canvi en Metadata voldriem la descripci
ó
de tals consultes (data sobre data).


En general amb JDBC metadata podrem trobar resposta per exemple als metadatos d’una
conexió a una Base de Dades i en concret a per exemple:





Quina llista de taules o vistes están disponibles?



Quins són els noms i e
ls tipus de columnes en cada taula o vista?



Quins són els camps clau d’una Taula?



Quins són els camps clau forànis que usa una Taula (si els té) (integritat referencial) ?



Quina es la signatura d’un stored procedure? Quins camps d’entrada i sortida té?



3
.2.6 Interfaces sobre metadatos sobre Bases de Dades


Ara veurem algunes interfaces sobre metadatos sobre la Bases de Dades que estem conectats.

Disposem de tres interfaces importants molt útils:




Interface DatabaseMetaData


Informació sobre la Base de D
ades que ens hem conectat

Pág.
40

de
94



Interface ResulsetMetaData

Informació sobre columnes d’un ResultSet.



Interface ParameterMetaData

Informació sobre els tipus i propietats dels paràmetres d’un objecte PreparedStatement.


3.2.6.1 Interface DatabaseMetaData


Interfa
ce DatabaseMetaData dona informació àmplia sobre la Base de Dades que estem
conectats. Aquesta informació es pot dividir en les categories d’informació:




Els esquemes, els catàlegs, taules, vistes, columnes i tipus de columnes



La Base de Dades, usuaris,
drivers, procediments emmagatzemats i funcions.



Els límits de la Base de Dades. Exemple: máxim de conexions que suporta la BD.



Les característiques que soporta y no soporta la Base de Dades.
Exemple: si soporta en
els SQL Outer Joins…



Per

a crear l’objec
te DatabaseMetaD
at
a cal invocar el mètode getMetaD
ata sobre la conexió a la
Base de Dades. Un cop creat l’objecte, tenim molta informació disponible de la Base de Dades.
És el pilar bàsic!



Es fa de la forma general:


. . . . .

// Aconseguir Metadatos de

la conexió Connection conn

DatabaseMetaData

mtdt = conn.getMetaData();
// MetaData sobre la base de dades !!!


if

(mtdt ==
null
) {
return

null
; }


. . . . .


Font: Apress


JDBC Metadata, MySQL and Oracle Recipies.
A Problem Solution [2006]



Es donen

algunes funcions, d’una amplissima llista, segons la seva funcionalitat en el format:
Tipus_valor_retorn Nom_FuncioInformació()
. Per exemple: String getUserName() és la funció de
nom getUserName que retorna un String



Informació general



String
getURL()


---

Retorna la URL de la DBMS.



String
getUserName()

---

Retorna el nom usuari a la BD.



String
getDatabaseProductVersion()

/
int
getDriverMajorVersion()

/
int
getDriverMinorVersion()

---

Retorna la versió de la BD i els números de versions Major nivell i

seguent nivell. Exemple: 10.2.1 retorna
Major 10 i Minor 1.



String
getSchemaTerm

/
String
getCatalogTerm

/

String
getProcedureTerm


Retorna els Termes Esquema, Catàleg I Procediemtns usats.



boolean
nullsAreSortedHigh

/
boolean
nullsAreSortedLow



boolean
us
esLocalFiles

/
boolean
usesLocalFilePerTable



String
getSQLKeywords()

---

Retorna les paraules SQL de la Base de Dades suportades



Suport



boolean
supportsAlterTableWithDropColumn



boolean
supportsBatchUpdates

--

Indica si se soporta actualitzacions e
n Batch (o
procés per lots
)

Pág.
41

de
94



boolean
supportsTableCorrelationNames



boolean
supportsPositionedDelete



boolean
supportsFullOuterJoins

---

Indica si se soporta Ourter Joins complerts



boolean
supportsStoredProcedures

---

Indica si se soporta Procediments emma
gatrzemats



boolean
supportsMixedCaseQuotedIdentifiers




boolean
supportsANSI92EntryLevelSQL
---

Indica si se soporta ANSI92



boolean
supportsCoreSQLGrammar

--

Indica si se soporta gramática SQL


Limits Orígen Dades



int
getMaxRowSize

--

Obtindre tamany màxi
m permès fila.



int
getMaxStatementLength

---

Obtindre tamany màxim permés en una sentencia.



int
getMaxTablesInSelect

---

Obtindre màxim Taules permesa en una Consulta



int
getMaxConnections

--

Obtindre màxim Conexions possibles



int
getMaxCharLiteralLeng
th



int
getMaxColumnsInTable

--

Obtindre màxim columnes permeses en una Taula.


Objectes SQL i els seus atributs



ResultSet
getSchemas()

/
ResultSet
getCatalogs()


Ens dona els Esquemes i els Catàlegs



ResultSet
getTables

---

Ens dona les Taules



ResultSe
t
getPrimaryKeys
---

Ens dona la descripció de les claus primaries




ResultSet
getProcedures /

ResultSet
getProcedureColumns

Ens dona els Procediments I les columnes de cada procediment



ResultSet
getUDTs

Retorna les descripcions dels tipus definits per l’u
suari que pertany al catàleg, esquema, nom de tipus i
patró de tipus passats com a paràmetre.



ResultSet

getColumns



Retorna les descripcions de les columnes que pertanyen al patró catàleg,
esquema, nom taula i nom de columa pasats com a paràmetre.



Trans
accions



supportsMultipleTransactions



getDefaultTransactionIsolation


JDBC 3.0 afegeix els mètodes:




getSuperTypes



Retorna una descripció de la jerarquia de tipus definits per l’usuari a partior de
l’esquema donat de la font de daes subjacent.



getSuperTab
les



Retorna una descripció de la jerquida de taula definita partir de l’esquema de la font
de dades subjacent.



getAttributes



Retorna una descripció dels tipus d’atributs definits per l’usuari del catàleg doant d’una
font de dades subjacent.



getSQLState
Type



Retorna el tipus de SQLSTATEs que retorna el mètòde
SQLException.getSQLState



supportsSavepoints



Retorna
true

si la implementació JDBC API suporta savepoints.



supportsNamedParameters



Retorna
true

si la implementació JDBC API suporta els noms de

paràmegtres pasats per objectes
CallableStatement.



supportsMultipleOpenResults



Retorna
true

si la implementació JDBC API suporta múltiples
ResultSets oberts per objectes CallableStatements



supportsGetGeneratedKeys



Retorna
true

si la implementació JDBC

API suporta la recuperació
automàtica de generació de claus.



getResultSetHoldability




Retorna el
holdability

per defecte d’objectes ResultSet retornats pel driver.


i modifica els mètodes getTables, getColumns, getUDTs I getSchemas.

Donat que s’usen pe
l projecte, s’ha agafat la definició JDBC 3.0. Actualment, per complicar
-
ho
més, ja hi ha la JDBC 4.0 que data de desembre’06.


Tot seguit es dona informació dels mètodes que s’usen a l’aplicació dividits segons la funció que
fan. A l’especificiació de Sun

de JDBC n’hi han tot un amplíssim detall de la inteface
Pág.
42

de
94

java.sql.DatabaseMetaData. Es pot trovar a
http://java.sun.com/j2se/1.5.0/docs/api/java/sql/DatabaseMetaData.htm
l
.


>>> Catalegs, Esquemes

Disposem dels mètodes getShemas y getCatalogs.

Mètode getShemas

-
> public
ResultSet

getSchemas
() throws
SQLException

Retorna els esquemes disponibles a la Base de Dades.

La informació en columnes que ens dona es:

1.

TABLE_SCHEM

String => Nom esquema

2.

TABLE_CATALOG

String =>

Nom catàleg (pot ser nul)


Mètode getCatalogs

-
> public
ResultSet

getCatalogs
() throws
SQLException

Retorna els catàlegs disponibles a la Base de Dades, ordenats pel nom catàleg.

La informació en columnes que ens dona:

1.

TABLE_CAT
String => Nom catàleg.


>>> Tipus de Taules

Disposem del mètode ge
tTableTypes.

Mètode getTableTypes

-
> public
ResultSet

getTableTypes
() throws
SQLException

Retorna els tipus de taules disponibles a la Base de Dades, ordenats per tipus taula.

La informació que columnes que ens dona:

1.

TABLE_TYPE
String => table type.

Els valors típics són: “TABLE”, “VIEW”, “SYS
TEM TABLE”, “GLOBAL TEMPORARY”, “LOCAL
TEMPORARY”, “ALIAS”, “SYNONYM”.


>>> Aconseguir les Taules de la Bases de Dades

Disposem del mètode getTables el qual ens dona les Taules.

Métode getTables

-
> public
ResultSet

getTables
(String

catalog, String

schemaPattern,


String

tableNamePattern, String[]

types)


throws
SQLException

Retorna una descripció de les taules disponibles en el catàleg donat i en base al patrons
esquema, nom de taula i tipus de taula donats. Per exemple, si volem taules que comencin per
‘SYS%’
ho especificarem em parámetre tableNamePattern. S’han de passar els noms que
realment son gravats a la Base de Dades (alguns sistemes son sensibles a mínúscules
-
majúscules com Oracle).

Cada descripció de la taula té les columnes:

1.

TABLE_CAT

String => Nom c
atàleg Taula catalog (pot ser nul)

2.

TABLE_SCHEM

String => Nom esquema Taula (pot ser nul)

3.

TABLE_NAME

String => Nom Taula

4.

TABLE_TYPE

String => Tipus Taula. Valors típics de te tipus de taula són: "TABLE", "VIEW", "SYSTEM
TABLE", "GLOBAL TEMPORARY", "LOCAL
TEMPORARY", "ALIAS", "SYNONYM".

5.

REMARKS

String => Comentaris que deixa el gestor sobre la Taula.

6.

TYPE_CAT

String => El tipus de catàleg (pot ser nul)

Pág.
43

de
94

7.

TYPE_SCHEM

String => El tipus d’esquemaa (pot ser nul)

8.

TYPE_NAME

String => El tipus de nom (pot ser nu
l)

9.

SELF_REFERENCING_COL_NAME

String => El nom que es designa a la columna "identifier" d’un tipus
de taula (pot ser nul).

10.

REF_GENERATION

String => especifica quins valors a SELF_REFERENCING_COL_NAME són creats.
Valors són: "SYSTEM", "USER", "DERIVED". (
pot ser nul)


Els resultats són ordenats per TABLE_TYPE, TABLE_SCHEM i TABLE_NAME.

Nota: Algunes dbVendors no retornen la informació de totes les taules.


Aconseguir els camps d’una Taula de la Bases de Dades

Disposem del mètode getColumns el qual ens don
a les columnes de la Taula o Taules
especificades.

Mètode getColumns

-
> public
ResultSet

getColumns
(
String

catalog,


String

schemaPattern,


String

tableNamePattern,


String

columnNamePattern)


throws
SQLException

Retorna la descripció de les columnes disponibles d’una taula en el catàleg e
specificat i d’acord
amb els patrons esquema, nom taula i nom columna. Per exemple: Es vol totes les taules que
comencin per ‘T%’ i que les columnes comencin per ‘ID%’

Cada descripció de la columna té els camps:

1.

TABLE_CAT

String => Nom catàleg taula (pot

ser nul)

2.

TABLE_SCHEM

String => Nom esquema taula (pot ser
null
)

3.

TABLE_NAME

String => nom taula

4.

COLUMN_NAME

String => nom columna

5.

DATA_TYPE

int => Tipus SQL descrita a java.sql.Types

6.

TYPE_NAME

String => Font de Dades depenent del tipus de nom, per a UD
T el tipus de nom es complert
qualificat.

7.

COLUMN_SIZE

int => Tamany de la columna. Per caracters o tipus tipus de dada és el màxim númer ode
caràcters, per númerics o tipus decimals, representa la precisió.

8.

BUFFER_LENGTH



No usat.

9.

DECIMAL_DIGITS

int =>

El numero de dígits fraccionats (decimals).

10.

NUM_PREC_RADIX

int => Base (típicamet sol ser 10 or 2)

11.

NULLABLE

int => si els NULL són permesos.

Valors possibles:


-

columnNoNulls


no pot tenir valors NULL


-

columnNullable


permet valors NULL


-

columnNullableUnknown


Es desconeix si permet o no valors NULL

12.

REMARKS

String => Comentari que descriu la columna (pot ser nul)

13.

COLUMN_DEF

String => Valor per defecte (pot ser nul)

14.

SQL_DATA_TYPE

int => No usat

15.

SQL_DATETIME_SUB

int => No usat

16.

CHAR_OCTET
_LENGTH

int => per cada tipus de caràcter el máxim número de bytes en el camp.

17.

ORDINAL_POSITION

int => index del camp a la taula (es comença per 1)

18.

IS_NULLABLE

String => "NO" significa que el camp no permet valors NULL, "YES" permet el camp valors
NULL.
Un valor buit significa que es desconeix. Nota: Igual a columna 11.

19.

SCOPE_CATLOG

String => catàleg de la taula que està com a atribut referencia (
null

si DATA_TYPE no
és REF)

20.

SCOPE_SCHEMA

String => schema de la taula que està a un atribut de refeencia (
n
ull

si DATA_TYPE no
és REF)

21.

SCOPE_TABLE

String => nom taula que està a un atribut de referència o tipus REF generat per l’usuari
ull

si DATA_TYPE no és REF)

22.

SOURCE_DATA_TYPE

short => el tipus de font d’un tipus
distinct

o tipus REF generat per l’usuari ,

Tipus
SQL a java.sql.Types (
null

si DATA_TYPE no és DISTINCT o REF generat per l’usuari)


Pág.
44

de
94

Els resultats son ordenats per TABLE_SCHEM, TABLE_NAME i ORDINAL_POSITION.


Aconseguir els privilegis d’una Taula i dels camps d’una Taula de la Bases de Dades

Dis
posem dels mètodes getTablePrivileges i de getColumnPrivileges el qual ens dona informació
dels privilegis o permisos d’una Taula o bé d’un camp.

Mètode getColumnPrivilegies

-
> public
ResultSet

getColumnPrivileges
(
String

catalog,


String

schema,


String

table,



String

columnNamePattern)


throws
SQLException

Retorna la descripció de l’accès o permisos dels camps de les Taules.

Cada descripció de privilegi té la informació següent:

1.

TABLE_CAT

String => Nom catàleg taula (pot ser nul)

2.

TABLE_SCHEM

String => Nom esquema
Taula (pot ser nul)

3.

TABLE_NAME

String => Nom Taula

4.

COLUMN_NAME

String => Nom Columna

5.

GRANTOR

String => grantor d’acéss (pot ser null
l
): ID d’autorització de l’usuari que ha otorgat el privilegi.

6.

GRANTEE

String => grantee d’accés: ID d’autorització de l’
usuari a qui se li ha otorgat el privilegi.

7.

PRIVILEGE

String => name of access (SELECT, INSERT, UPDATE, REFRENCES, ...)

8.

IS_GRANTABLE

String => "YES" si es permet a GRANTEE otorgar aquest privilegi a altres usuaris;; "NO"
si no;
null

si es desconeix.

Els

resultats estan ordenats per COLUMN_NAME i PRIVILEGE.



Mètode getTablePrivileges

-
> public
ResultSet

getTablePrivileges
(
String

catalog,


String

schemaPattern,



String

tableNamePattern)


throws
SQLException

Retorna la descripció de l’accès o permisos de cada Taula disponible en el Catàleg. Cada
privilegi d’una taula s’aplica a un o més camps de la taula però en cap cas es erroni assumir que
s’apliquen
a tots els camps (pot ser veritat solament en algunes Bases de Dades).

Cada descripció de privilegi té la informació següent:

1.

TABLE_CAT

String => Nom catàleg taula (pot ser nul)

2.

TABLE_SCHEM

String => Nom esquema Taula (pot ser nul)

3.

TABLE_NAME

String =>
Nom Taula

4.

GRANTOR

String => grantor d’acéss (pot ser null
l
): ID d’autorització de l’usuari que ha otorgat el privilegi.

5.

GRANTEE

String => grantee d’accés: ID d’autorització de l’usuari a qui se li ha otorgat el privilegi.

6.

PRIVILEGE

String => name of acce
ss (SELECT, INSERT, UPDATE, REFRENCES, ...)

7.

IS_GRANTABLE

String => "YES" si es permet a GRANTEE otorgar aquest privilegi a altres usuaris;; "NO"
si no;
null

si es desconeix.

Els resultats estan ordenats per TABLE_SCHEM, TABLE_NAME i PRIVILEGE..


Aconsegu
ir les claus primaries d’una Taula

Disposem del mètode getPrimaryKeys que ens dona les claus primaries d’una Taula.

Una
clau Primaria (PK)

és una camp o varis camps que identifiquen una fila o registre d’una
Taula.

Mètode getPrimaryKeys

-
> public
ResultSet

getPrimaryKeys
(
String

catalog,



String

schema,


String

table)


throws
SQLException

Pág.
45

de
94

Retorna una descripció dels camps que forma la clau primaria d’una Taula.

Cada

columna de la clau primaria disposa de la informació:

1.

TABLE_CAT

String => Nom catàleg taula (pot ser nul)

2.

TABLE_SCHEM

String => Nom esquema taula (pot ser nul)

3.

TABLE_NAME

String => Nom Taula

4.

COLUMN_NAME

String => Nom Columna

5.

KEY_SEQ

short => Número s
eqüència dins la clau primaria.

6.

PK_NAME

String => Nom de la clau primaria (pot ser nul)