Come si e' detto, l'interazione con un database relazionale avviene
normalmente utilizzando istruzioni SQL. L'invio delle istruzioni al DBMS
puo' avvenire in due modi:
- invocazione interattiva
- invocazione tramite un programma applicativo
Nel primo caso viene utilizzato un programma il cui scopo e' quello di
ricevere in input le istruzioni SQL, trasmetterle al DBMS e visualizzare
i risultati all'utente. Normalmente tutti i DBMS mettono a disposizione
un programma, di solito di tipo testuale, con tali funzionalita'.
Nel caso di PostgreSQL, il DBMS che utilizzero' per implementare il database
di esempio, il programma si chiama "psql". La sintassi da utilizzare per
invocarlo in modalita' interattiva e' la seguente:
psql [ dbname [ user ] ]
"dbname" e' il nome del database a cui si vuole accedere, mentre "user"
e' il nome dell'utente con cui si vuole accedere al database. Ad
esempio, il comando:
psql mydb benfante
attiva il programma psql, accedendo al database mydb come utente
benfante. Se tutto e' andato bene, in particolare se il database esiste
e l'utente ha i permessi necessari per accedervi, psql mostra un prompt
simile al seguente:
mydb=>
A questo punto si possono digitare i comandi SQL (terminandoli con un
";" o con il meta-comando "g" (go) per farli eseguire) e leggere
sullo schermo i risultati che producono.
Normalmente i programmi come psql possono essere utilizzati anche in
maniera non-interattiva. Ad esempio, invocando psql col seguente
comando:
psql -f istruzioni.sql mydb benfante
il programma esegue le istruzioni SQL contenute nel file istruzioni.sql
e termina immediatamente dopo. In questo modo e' possibile automatizzare
operazioni che devono essere ripetute di frequente o, comunque, che sono
composte da lunghe sequenze di comandi SQL, senza doverle digitare
manualmente ogni volta.
Nel caso dell'invocazione delle istruzioni SQL tramite un programma
applicativo, esse sono eseguite nel corso dell'esecuzione di tale
programma ed i risultati vengono utilizzati dal programma per produrre
il suo output. In questa situazione l'utente non sottopone direttamente
i comandi SQL e potrebbe anche non essere a conoscenza che il programma
che sta utilizzando accede ad un database relazionale: l'unica cosa che
vede e' l'interfaccia che l'applicazione gli mette a disposizione.
Abbiamo sostanzialmente due sistemi per scrivere applicazioni di questo
tipo:
- utilizzare una libreria che gestisca la comunicazione con il DBMS,
trasmetta le istruzioni SQL e ci permetta di manipolare i risultati
prodotti. Librerie di questo tipo sono ad esempio JDBC e ODBC. Spesso i
produttori dei DBMS forniscono delle librerie proprietarie, che sono
specifiche per il loro prodotto. Ad esempio, nel caso di PostgreSQL
la libreria per il linguaggio C si chiama "libpq". Spesso si cerca di
non utilizzare librerie proprietarie perche' le applicazioni risultano
molto specifiche (funzionano solo con il database per cui la libreria e'
stata costruita). Invece utilizzando librerie "standard" come JDBC o ODBC
le applicazioni funzioneranno con qualunque DBMS che esponga
l'interfaccia richiesta dalla libreria (a meno di non utilizzare
funzionalita' specifiche del DBMS). - utilizzare l'Embedded SQL (ESQL). In questo caso il codice SQL viene
inglobato nel codice di un linguaggio ospite e vengono utilizzati i
normali meccanismi del linguaggio per il passaggio dei parametri e
l'utilizzo dei risultati. Normalmente il codice cosi' prodotto viene
prima convertito da un pre-processore e in seguito compilato dal
compilatore del linguaggio ospite. Un ulteriore vantaggio
nell'utilizzare l'ESQL risiede nel fatto che esiste uno standard ANSI che
descrive come esso dovrebbe funzionare. In questo modo e' possibile che
un programma scritto per un determinato DBMS possa essere ricompilato e
funzionare anche per un altro. PostgreSQL mette a disposizione un
pre-processore ESQL per il linguaggio C (ecpg).
Nelle successive lezioni utilizzeremo psql per inviare le istruzioni SQL
che implementeranno, popoleranno e interrogheranno il database
d'esempio. Nell'ultima lezione verra' invece presentata un'applet Java
che utilizzera' la libreria JDBC per consultare il database
bibliografico.