15.06.2013 Views

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 ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!