Salta el contingut

1. Connectors

1.1. L'arquitectura client-servidor en SGBD

Un cop coneixem el retard relacional-objecte, centrem-nos en com accedir a bases de dades relacionals des dels llenguatges de programació. Els SGBD, es van popularitzar als anys 80, i són els més estesos actualment. Llevat d'algunes excepcions, funcionen seguint una arquitectura client-servidor, de manera que tenim un servidor on executa el SGBD i diversos clients que es connecten al servidor i fan les peticions corresponents.

Els SGBD oferien els seus propis llenguatges de programació, però estaven molt lligats a ells, i el manteniment de l'aplicació era molt car. Per aquest motiu, la tendència era desacoblar (separar) els SGBD del llenguatge de programació, i fer ús d'estàndards de connexió entre ells.

Gràcies a l'arquitectura client-servidor, els SGBD van poder separar les dades d'una banda i els programes per accedir-hi per altres. Aquesta versatilitat tenia un petit inconvenient, i és que calia desenvolupar d'una banda el servidor, però de l'altra, també la part del client per poder connectar-se als servidors. Aquestes connexions entre clients i servidors requeriran protocols i llenguatges específics. Aquí neix el concepte de middleware, entès com una capa intermèdia de persistència, formada per biblioteques, llenguatges i protocols ubicats al client i al servidor i que permeten connectar la base de dades amb les aplicacions.

Tot i que inicialment cada SGBD va implementar solucions específiques, es van imposar estàndards, entre els quals trobem el llenguatge de consulta SQL (Structured Query Language), i que va suposar un gran avanç, ja que va unificar la manera d'accedir a les bases de dades, encara que les aplicacions van continuar requereixen una API per fer ús de SQL.

1.2. Protocols d'accés a bases de dades

Quan parlem de protocols d'accés a bases de dades, ens trobem amb dues regles principals de connexió:

  • ODBC (Open Data Base Connectivity): Aquesta és una API (Application Program Interface) desenvolupada per Microsoft per a sistemes Windows que permet afegir diferents connectors a diverses bases de dades relacionals basades en SQL, d'una manera senzilla i transparent. Utilitzant ODBC, les aplicacions poden obrir connexions a la base de dades, enviar consultes, actualitzacions i gestionar els resultats.
  • JDBC (Java Database Connectivity), que defineix una API multiplataforma que els programes Java poden utilitzar per connectar-se al SGBD.

1.3. JDBC

Com hem dit, JDBC és una API de connexió a bases de dades específica de Java. El seu mode de funcionament és el següent:

  • S'ofereix una API, encapsulada en classes, que garanteix uniformitat en la manera en què les aplicacions es connecten a la base de dades, independentment del SGBD subjacent.
  • Necessitarem un controlador per a cada base de dades a la qual volem connectar-nos. Java no té cap llibreria ODBC específica, però, per no perdre el potencial d'aquestes connexions, s'han incorporat controladors especials que actuen com a adaptadors entre JDBC i ODBC, de manera que és possible, a través d'aquest pont, connectar qualsevol aplicació Java amb qualsevol connexió ODBC. Actualment, gairebé tots els SGBD tenen controladors JDBC, però en cas que no en tingueu coneixement, podeu fer servir aquest pont ODBC-JDBC.

1.3.1. Arquitectura JDBC

La biblioteca estàndard JDBC proporciona un conjunt d'interfícies independents de la implementació. Els controladors de cada DBMS seran els encarregats de la implementació. Les aplicacions, per accedir a la base de dades, hauran d'utilitzar les interfícies JDBC, de manera que la implementació de cada DBMS sigui completament transparent per a l'aplicació.

JDBC

Com podem veure, les aplicacions Java accedeixen als diferents mètodes que l'API especifica com a interfícies, però són els controladors els que accedeixen a la base de dades.

Cal dir que les aplicacions poden utilitzar diversos controladors JDBC simultàniament i accedir, per tant, a múltiples bases de dades. L'aplicació especifica un controlador JDBC utilitzant una URL (Universal Resource Locator) al gestor de controladors, i aquest és el responsable d'establir correctament les connexions amb les bases de dades a través dels controladors. Els controladors poden ser de diferents tipus:

  • Tipus I o controladors de pont, caracteritzats per fer ús de tecnologia externa a JDBC i actuar com a adaptadors entre JDBC i la tecnologia específica utilitzada. Un exemple és el pont JDBC-ODBC.
  • Tipus II o controladors amb API parcialment nativa, o controladors natius. Estan entrenats d'una banda en Java i de l'altra fan ús de llibreries del sistema operatiu. El seu ús es deu a alguns SGBD que incorporen connectors propietaris que no segueixen cap estàndard (normalment pre-ODBC/JDBC).
  • Tipus III o controladors Java a través de protocol de xarxa, que són controladors desenvolupats en Java que tradueixen les crides JDBC a un protocol de xarxa contra un servidor intermedi. És un sistema molt flexible, ja que els canvis en la implementació de la base de dades no afecten les aplicacions.
  • Tipus IV o 100% Java pures, també anomenats protocol natius, i aquests són controladors escrits íntegrament en Java. Les sol·licituds al SGBD es realitzen a través del protocol de xarxa que utilitza el mateix SGBD, de manera que no és necessari cap codi natiu al client ni un servidor intermediari. És l'alternativa que s'ha acabat imposant, ja que no requereix cap tipus d'instal·lació.

1.4. MySQL, Docker, Workbench

Aquest any farem servir MySQL com a SGBD, per la seva àmplia utilització en diversos contextos i per la seva simplicitat. Per utilitzar-lo, has d'instal·lar mysql-server com a servei al teu sistema, com has estudiat els últims anys.

El servidor MySQL es pot instal·lar al teu ordinador, o bé pots instal·lar-lo en una màquina virtual o configurar-lo com a contenidor Docker. Per tenir un sistema més net, l'opció recomanada és amb contenidor Docker, ja que podràs executar diverses versions de MySQL sense interferències entre elles.

Note

Teniu una documentació addicional sobre com crear un contenidor MySQL en un document anomenat Docker per a MySQL. Així doncs, i pel que fa a la resta del document, assumirem que ja teniu la imatge de Docker de MySQL i un contenidor en execució al port 3308 (MySQL utilitza el port 3306 per defecte, però en el nostre contenidor exposarem el servei al port 3308, en cas que ja tingueu un servidor MySQL local en execució al port 3306).

Bash
# Remember that to create the container (only fisrt time)

docker run --name mysql-srv
      -p 3308:3306
      -e MYSQL_ROOT_PASSWORD="root"
      -d mysql:latest

# It will create and start the container

# To stop the container
docker stop mysql-srv

# And to start the container ( AVOID TO run IT AGAIN !!!)
docker start mysql-srv

I finalment, però no menys important, evidentment, podeu utilitzar una eina gràfica per accedir a MySQL, com ara mysql-workbench o dbeaver. Heu de configurar una connexió al port de Docker:

Workbench

Espai

Revisa les notes del teu mòdul de bases de dades sobre com treballar amb Workbench:

Text Only
1
2
3
4
- Carrega i executa scripts SQL
- Recupera l'estructura de la base de dades
- Edita i crea SQL
- Edita i guarda dades

Disposes del scrip Esquema BD Jocs per carregar els exemples dels apunts