A cura di Andrea Silvestri
Pubblicato il 15/07/2001
Prosegue la descrizione dello standard sqlj, focalizzando l'attenzione sulla connessione al database.
Tutte le istruzioni #sql utilizzano, salvo diversa specificazione, una connessione (contesto) di default (Default Connection Context), che permette appunto di definire il database al quale connettersi.
Vediamo le istruzioni che inizializzano tale contesto, utilizzando il driver jdbc:
Solite definizioni:
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String pass = "tiger";
Registrazione del driver jdbc:
DriverManager.registerDriver(new oracle.jdbc.driver.oracleDriver());
Impostazione del contesto di default:
DefaultContext.setDefaultContext(new DefaultContext(url, user, pass, false));
L'ultimo parametro definisce a false l'autocommit.
A questo punto tutte le istruzioni #sql {....} utilizzeranno questa connessione.
E' possibile definire altri contesti (Named Connection Context), oltre quello di default, seguendo i seguenti passi:
Dichiarazione di una classe che implementi la ConnectionContext:
#sql context MiaConn
Istanziazione ed inizializzazione della classe:
MiaConn miac = new MiaConn(url1,user1,pass1,false);
A questo punto e' stato dichiarato ed istanziato un nuovo contesto, che puo' essere utilizzato, in modo esplicito, nelle istruzioni sqlj:
#sql [miac] {....}
E' ovviamente possibile definire piu' istruzioni sqlj che utilizzano contesti differenti, in modo da eseguire query sullo stesso database con utenti differenti o su database diversi.
Concludo parlando degli iteratori, che permettono di memorizzare il risultato di una query che estrae piu' di un record.
Consideriamo la tabella impiegati e supponiamo di voler estrarre nome,cognome e sede di tutti gli impiegati, dovremo utilizzare quindi un iteratore in quanto non e' possibile usare la select into.
I passi per definire ed utilizzare un iteratore sono:
Definizione di una classe iteratore:
#sql iterator ImpItera (String nome, String cogn, int sede);
Dichiarazione di una variabile della classe iteratore:
ImpItera impieg;
Esecuzione della query di estrazione dei record:
#sql impieg = {SELECT nome,cognome,sede FROM impiegati};
Per ora e' tutto, nel prossimo intervento vedremo come leggere i record memorizzati nell'iteratore.