Strategie per l'utilizzo dei database SQL

Adobe AIR 1.0 e versioni successive

Esistono vari modi in cui le applicazioni possono accedere ai database SQL locali ed utilizzarli. Dal momento che il design delle applicazioni può variare dal punto di vista dell'organizzazione del codice, della sequenza e della sincronia con cui le operazioni vengono eseguite, e così via, le tecniche scelte possono avere un notevole effetto sulla facilità o meno di sviluppo dell'applicazione. Ad esempio, possono influire sulla facilità di modifica dell'applicazione nel caso si desideri aggiornarla in futuro e anche sulle sue prestazioni percepite dal punto di vista dell'utente.

Distribuzione di database con dati già inseriti

Quando si usa un database SQL AIR locale nell'applicazione, questa presuppone che il database abbia una certa struttura composta da tabelle, colonne e così via. Alcune applicazioni presuppongono inoltre che nel file del database siano già presenti certi dati. Un modo per essere certi che il database abbia la struttura corretta è quello di creare il database stesso all'interno del codice dell'applicazione. Quando l'applicazione lo carica, controlla se in una particolare posizione è presente il relativo file di database. Se tale file non esiste, l'applicazione esegue un set di comandi in modo da creare il file e la struttura del database e inserire nelle tabelle i dati iniziali.

Il codice che crea il database e le relative tabelle è spesso complesso e, anche se viene utilizzato una sola volta in tutta la durata di installazione dell'applicazione, ne aumenta le dimensioni e la complessità. Come soluzione alternativa alla creazione del database, della struttura e dei dati tramite il programma, è possibile distribuire insieme all'applicazione un database in cui sono già stati inseriti i dati. Per distribuire un database predefinito è necessario includere il relativo file nel pacchetto AIR dell'applicazione.

Come tutti i file inclusi nel pacchetto AIR, il file di database di corredo viene installato della directory dell'applicazione (cioè la directory rappresentata dalla proprietà File.applicationDirectory). I file di quella directory, tuttavia, sono di sola lettura. Utilizzate il file del pacchetto AIR come database “modello”. La prima volta che l'utente esegue l'applicazione, copiate il file del database originale nella Puntamento alla directory di memorizzazione dell'applicazione dell'utente, o in una posizione diversa, ed utilizzate tale database nell'applicazione.

Metodi efficaci per l'utilizzo dei database SQL

L'elenco seguente illustra una serie di tecniche che possono essere utilizzate al fine di migliorare le prestazioni, la protezione e la comodità di manutenzione delle applicazioni quando si utilizzano i database SQL locali.

Creazione preventiva delle connessioni al database

Anche se l'applicazione non esegue nessuna istruzione all'atto del primo caricamento, per evitare ritardi quando si eseguono le istruzioni, create un'istanza dell'oggetto SQLConnection e chiamate il relativo metodo open() oppure openAsync() in anticipo, ad esempio dopo l'avvio iniziale dell'applicazione. Consultate Connessione a un database.

Riutilizzo delle connessioni al database

Se si accede a un determinato database durante tutto il periodo in cui l'applicazione è in esecuzione, è consigliabile tenere un riferimento all'istanza SQLConnection e riutilizzarla in tutta l'applicazione, invece che chiudere e riaprire la connessione. Consultate Connessione a un database.

Preferenza della modalità di esecuzione asincrona

Quando si scrive il codice di accesso ai dati si può avere la tentazione di eseguire le operazioni in modo sincrono invece che asincrono, poiché l'utilizzo delle operazioni sincrone richiede spesso la scrittura di codice più breve e meno complesso. Tuttavia, come descritto nella sezione Utilizzo delle operazioni di database sincrone e asincrone, le operazioni sincrone possono avere sulle prestazioni un effetto negativo che appare evidente agli utenti e rende meno piacevole la loro esperienza dell'uso dell'applicazione. Il tempo impiegato da ciascuna operazione varia a seconda dell'operazione in oggetto e soprattutto a seconda della quantità di dati da essa interessata. Ad esempio, un'istruzione SQL INSERT che aggiunga una sola riga al database impiega meno tempo di un'istruzione SELECT che recuperi migliaia di righe di dati. Quando si usa la modalità di esecuzione sincrona per eseguire più operazioni, però, esse sono di solito legate l'una all'altra in una serie; quindi, anche se il tempo impiegato da ciascuna operazione è molto breve, l'applicazione si blocca comunque finché tutta la serie di operazioni sincrone non è stata eseguita. Il tempo totale impiegato da più operazioni legate in serie può addirittura bloccare completamente l'applicazione.

Utilizzate normalmente la modalità asincrona, specialmente nel caso di operazioni che coinvolgono un gran numero di righe. Esiste una tecnica per la divisione in gruppi dell'elaborazione dei set di risultati di grandi dimensioni delle istruzioni SELECT ed è descritta nella sezione Recupero parziale dei risultati SELECT. La tecnica può però essere utilizzata solo nella modalità di esecuzione asincrona. Utilizzate operazioni sincrone solo se non è possibile ottenere le funzionalità desiderate con la programmazione asincrona, dopo aver preso in considerazione i compromessi in termini di prestazioni che gli utenti dovranno accettare e dopo aver provato l'applicazione in modo da essere sicuri dell'effetto di tale programmazione sulle prestazioni. L'utilizzo della modalità asincrona implica spesso la scrittura di un codice più complesso. Va comunque tenuto presente che il codice si scrive una volta sola ma deve venire usato molte volte dagli utenti dell'applicazione, lento o veloce che sia.

In molti casi, utilizzando un'istanza SQLStatement separata per ciascuna istruzione SQL da eseguire è possibile accodare più operazioni SQL in una volta, il che rende il codice asincrono molto simile a quello sincrono dal punto di vista della scrittura. Per ulteriori informazioni, consultate Modalità di esecuzione asincrona.

Utilizzo di istruzioni SQL separate e invariabilità della proprietà text di SQLStatement

Create un'istanza SQLStatement separata per ciascuna istruzione SQL che viene eseguita più di una volta nell'applicazione. Utilizzate tale istanza SQLStatement tutte le volte che viene eseguito tale comando SQL. Ad esempio, supponiamo di stare creando un'applicazione che comprende quattro operazioni SQL diverse che vengono eseguite più volte. In tal caso si devono creare quattro istanze SQLStatement separate e chiamare il metodo execute() di ciascuna istruzione per eseguirla. Evitate di utilizzare una sola istanza SQLStatement per tutte le istruzioni SQL e di dover ridefinire la relativa proprietà text ogni volta prima dell'esecuzione di ciascuna istruzione.

Utilizzo dei parametri quando si creano le istruzioni

Utilizzate i parametri SQLStatement e non concatenate mai l'intervento dell'utente nel testo dell'istruzione. L'utilizzo dei parametri rende l'applicazione più sicura, in quanto evita la possibilità degli attacchi di SQL injection. Rende inoltre possibile l'utilizzo nelle query degli oggetti invece che dei soli valori letterali SQL. E ancora, consente alle istruzioni di essere eseguite in modo più efficiente perché possono essere riutilizzate senza bisogno di ricompilazione ogni volta che vengono eseguite. Per ulteriori informazioni, consultate Utilizzo dei parametri nelle istruzioni.