Connettere una applicazione Java ad un database SQL tramite JDBC

Connettere una applicazione Java ad un database SQL tramite JDBC

In questo articolo vedremo come poter recuperare dei record da un database SQL (utilizziamo PostgreSQL) da una Web Application Java utilizzando le JavaServer Pages (JSP) come tecnologia Web. Per poter accedere ad un Database SQL da codice Java è necessario ottenere un driver JDBC.

Come reimpostare la password di root di MySQL Server
IBM Data Studio
MySQL Installer for Windows: un pacchetto software per installare e configurare MySQL su Windows

In questo articolo vedremo come poter recuperare dei record da un database relazionale SQL (utilizziamo PostgreSQL) da una Web Application Java utilizzando le JavaServer Pages (JSP) come tecnologia Web. Per poter accedere ad un Database SQL da una applicazione Java è necessario ottenere un driver JDBC. Le API Java JDBC consentono alle applicazioni Java di connettersi ad un database relazionale tramite un’API standard, rendendo le applicazioni Java indipendenti (o quasi) dall’implementazione di database scelta per l’applicazione.

In particolare JDBC standardizza come una applicazione Java può connettersi ad un database, come eseguire query su di esso, come navigare il risultato di una query, e come eseguire gli update del database, mentre non standardizza la sintassi SQL inviata al database. Questa può variare da database a database.

Scarichiamo i driver JDBC per il nostro database

Per PostgreSQL possiamo scaricare i driver JDBC andando al seguente indirizzo:

https://jdbc.postgresql.org/download.html

Nella pagina di download sono presenti i driver (con estensione .jar) per tutte le versioni di PostgreSQL e di Java per i driver JDBC versione 4 (ad esempio se abbiamo Java 8 e PostgreSQL 9.4 scarichiamo il driver 9.4.1211 JDBC 42). Potrebbero esservi delle minime differenze in base alla versione di PostgreSQL e Java utilizzate. Questa libreria verrà poi inclusa nel nostro progetto Web come vedremo in seguito.

Creiamo un database PostgresSQL di esempio

Per prima cosa creiamo un database di esempio su PostgresSQL; possiamo utilizzare il tool di amministrazione pgAdmin (PostgreSQL administration and management tools), e diamo il seguente comando:

create database appuntisoftware

successivamente creiamo una tabella anagrafica di esempio:

CREATE TABLE anagrafica
 (
 id serial NOT NULL,
 nome character varying(50),
 cognome character varying(50),
 eta integer
 ),
CONSTRAINT anagrafica_pkey PRIMARY KEY (id)


Inseriamo dei dati di esempio all’interno della tabella anagrafica:

insert into anagrafica (nome, cognome, eta) values ('mario','rossi',33);
insert into anagrafica (nome, cognome, eta) values ('paolo','bianchi',31);
insert into anagrafica (nome, cognome, eta) values ('gianluca','verdi',19);

Creiamo l’applicazione Java di esempio in Eclipse

Creiamo ora la nostra applicazione Java. Utilizziamo l’IDE Eclipse e creiamo un Dynamic Web Project, facendo tasto destro nel Project Explorer e selezionando la voce New:

crearewebproject
Creiamo un’applicazione Web Java cliccando sulla voce Dynamic Web Project

oppure, se non dovesse comparire nel menù a tendina, clicchiamo sulla voce Other…:

Creiamo un dynamicWeb Project
Creiamo un Dynamic Web Project

Inseriamo il nome del nostro progetto, abbiamo scelto TestDBConnection e lasciamo invariate le altre scelte (Apache Tomcat 8 e Specifica Servlet 3.1):

Configurazione Dynamic Web Project
Configurazione Dynamic Web Project

Clicchiamo su Next e proseguiamo finché non ci chiede di generare il file web.xml e spuntiamo la casella:

Flaggiamo la casella per generare il file web.xml
Flaggiamo la casella per generare il file web.xml

Una volta generato il progetto, otteniamo il seguente albero di directory:

Albero directory del web project
Albero directory del web project

Configuriamo il DataSource

Per poter accedere al database PostgreSQL dichiariamo una risorsa JNDI di tipo DataSource utilizzando un elemento XML di tipo Resource. Questo elemento XML contenuto a sua volta in un elemento Context andrà salvato in un file di nome context.xml. Questo file può essere creato in due differenti path a seconda degli utilizzi:

  • sotto la cartella WebContent/META-INF dell’applicazione web creata e sarà disponibile solo per questa;
  • sotto la cartella $CATALINA_BASE/conf, dove $CATALINA_BASE rappresenta il path (tipicamente C:\Program Files\Apache Tomcat\) dove abbiamo installato Tomcat (coincide con  $CATALINA_HOME nel caso in cui non utilizziamo istanze multiple di Tomcat), rendendolo disponibile per tutte le applicazioni web che girano sotto l’istanza Tomcat.

Nel file context.xml inseriremo i parametri di configurazione del database PostgreSQL e del pool di connessioni. Tipicamente nelle applicazioni Web si utilizza un pool di connessioni in modo da velocizzare l’accesso al database, ciò perché stabilire una connessione con un database è un’operazione molto complessa. Infatti, è necessario caricare il driver del database, stabilire una comunicazione bidirezionale sicura fra l’applicazione che deve accedere ai dati e il database stesso, eseguire una procedura di autenticazione e allocare le risorse necessarie per gestire le query successive. Allora anziché creare una nuova connessione ad ogni richiesta, quando un Client non ha più bisogno dell’accesso al Database rilascia la connessione in una coda in modo da poter poi essere recuperata da un altro Client. Il DataSource di default supportato in Tomcat è basato sul DBCP connection pool del progetto Commons. In particolare dobbiamo specificare i seguenti attributi:

  • name: l’identificativo della risorsa che andremo a richiamare nelle nostre pagine JSP;
  • auth: dove specifichiamo il meccanismo di autenticazione, può essere Container o Application;
  • driverClassName: il nome della classe del Driver JDBC specifica per ogni vendor di database (org.postgresql.Driver per PostgreSQL);
  • url: la url di connessione al database, comprensiva di ip, porta e nome database;
  • username e password: le credenziali di accesso al database;
  • maxTotal: massimo numero di connessioni al database nel pool di connessioni. Settiamo a -1 per non porre limiti;
  • maxIdle: massimo numero di connessioni in idle al database da ritenere nel pool di connessioni. Settiamo a -1 per non porre limiti;
  • maxWaitMillis: massimo tempo di attesa per una connessione al database affinchè diventi disponibile in millisecondi. Una eccezione è lanciata se questo timeout è superato. Settiamo a -1 per aspettare in modo indefinito.

Un esempio di file context.xml è il seguente:

<Context>
<Resource name="jdbc/postgres" auth="Container"
          type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
          url="jdbc:postgresql://127.0.0.1:5433/appuntisoftware"
          username="postgres" password="postgres" maxTotal="20" maxIdle="10"
          maxWaitMillis="-1"/>          
</Context>

Nella seconda parte dell’articolo mostriamo due esempi di pagine JSP che utilizzano il DataSource appena definito.

PAGES

1 2

COMMENTS

WORDPRESS: 3
  • comment-avatar

    Spiegazione molto utile, grazie!

  • comment-avatar

    Articolo interessante e molto esaustivo! Grazie mille!

  • comment-avatar

    Anche per me che sono una mezza schiappa con la tcnologia, ci ho capito quaalccosa! Quindi l’articolo è stato davvero esaustivo!