Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Carnielli Efrem: Programmazione a componenti<br />
Applicazioni Client-Server e database<br />
il cursore <strong>di</strong> cui abbiamo parlato <strong>in</strong> precedenza, <strong>in</strong> Java come <strong>di</strong>cevamo ho la classe<br />
RecordSet che mi permette <strong>di</strong> percorrere lo stream che il RDBMS mi fornisce.<br />
6.5 Prepared Statement e Sql d<strong>in</strong>amico<br />
Il prepared statement ci consente <strong>di</strong> eseguire una sola volta i passi dall’1 al 5 visti <strong>in</strong><br />
precedenza, ottenendo così come risultato un piano d’accesso, <strong>di</strong> cui viene tenuta<br />
traccia e che può essere utilizzato per richieste successive.<br />
È conveniente utilizzare il prepared statement quando lo statement viene eseguito<br />
più volte, <strong>in</strong> maniera tale da poter eseguire lo stesso piano d’accesso <strong>di</strong> volta <strong>in</strong><br />
volta. Infatti sarà sufficiente mantenere un puntatore al piano <strong>di</strong> acceso<br />
preventivamente creato e riutilizzarlo all’occorrenza passandogli <strong>di</strong> volta <strong>in</strong> volta i<br />
nuovi parametri.<br />
Tramite esempi pratici cercheremo <strong>di</strong> capire meglio quanto appena visto.<br />
Consideriamo la seguente richiesta.<br />
select select *<br />
*<br />
from from from anagrafe<br />
anagrafe<br />
where where where età età > > ?<br />
?<br />
Il punto <strong>di</strong> domanda è un marker. Quando ve ne sono più <strong>di</strong> uno vengono<br />
identificati dall’ord<strong>in</strong>e <strong>in</strong> cui appaiono.<br />
Il prossimo obbiettivo è cercare <strong>di</strong> <strong>in</strong>trodurre la nozione <strong>di</strong> Sql d<strong>in</strong>amico.<br />
Potremmo creare la query nella maniera seguente:<br />
sqlParziale sqlParziale =<br />
=<br />
“select “select *<br />
*<br />
from from from anagrafe anagrafe<br />
anagrafe<br />
where età >”;<br />
e e := := 20;<br />
20;<br />
sql sql := := sqlParziale sqlParziale + + e;<br />
e;<br />
dove p è una variabile del l<strong>in</strong>guaggio <strong>di</strong> programmazione a cui viene associata<br />
l’età.<br />
Questa query è <strong>di</strong>fferente <strong>in</strong> quanto allo statement viene data una str<strong>in</strong>ga statica:<br />
prima viene valutato ciò che c’è a destra (nell’esempio + p) e poi assegnato alla<br />
variabile statement.<br />
Per sod<strong>di</strong>sfare la richiesta il Db server deve ripetere tutti i passi visti <strong>in</strong> precedenza<br />
senza migliorie dovute ai PreparedStatement. Infatti questo modo <strong>di</strong> confezionare<br />
le query mi permette <strong>di</strong> risparmiare co<strong>di</strong>ce ma non <strong>di</strong> avere grossi vantaggi<br />
computazionali.<br />
Potrei <strong>in</strong>vece fare <strong>in</strong> questo modo:<br />
140