Er zijn verschillende manieren waarop een toepassing een lokale SQL-database kan benaderen en ermee kan werken. Het ontwerp van de toepassing kan variëren op het gebied van de structuur van de toepassingscode, de sequentie en timing van de uitvoering van de bewerkingen enzovoort. De technieken die u kiest, kunnen een invloed hebben op het gemak waarmee uw toepassing kan worden ontwikkeld. Ze kunnen een invloed hebben op het gemak waarmee de toepassing in de toekomst kan worden aangepast. Ze kunnen ook een invloed hebben op de prestaties van de toepassing voor de gebruiker.
Niet-lege databases distribueren
Als u een lokale SQL-database van AIR in uw toepassing gebruikt, verwacht de toepassing een database met een bepaalde structuur (tabellen, kolommen enzovoort). Sommige toepassingen verwachten ook bepaalde gegevens in het databasebestand. U kunt op verschillende manieren zorgen dat de database de juiste structuur heeft, onder andere door de database binnen de toepassingscode te creëren. Wanneer de toepassing wordt geladen, controleert deze of het gekoppelde databasebestand zich op een bepaalde locatie bevindt. Als dat niet het geval is, voert de toepassing een reeks opdrachten uit om het databasebestand te creëren, de databasestructuur toe te passen en de tabellen te vullen met de initiële gegevens.
De code die de database en de overeenkomstige tabellen creëert, is vaak complex. Hoewel deze code doorgaans slechts één keer tijdens de levensduur van de geïnstalleerde toepassing wordt gebruikt, wordt de toepassing er groter en complexer door. Een alternatief voor het programmamatig creëren van de database, structuur en gegevens is uw toepassing te distribueren met een niet-lege database. Hiervoor neemt u het databasebestand op in het AIR-pakket van de toepassing.
Net als alle bestanden die in een AIR-pakket worden opgenomen, wordt een gebundeld databasebestand geïnstalleerd in de toepassingsmap (de map die wordt ingesteld door de eigenschap
File.applicationDirectory
). Bestanden in die map zijn echter alleen-lezen. Gebruik het bestand uit het AIR-pakket als “sjabloon”database. De eerste keer dat een gebruiker de toepassing uitvoert, zorgt u dat het oorspronkelijke databasebestand naar de
De opslagmap van een toepassing aanwijzen
van de gebruiker (of een andere locatie) wordt gekopieerd. Vervolgens wordt die database in de toepassing gebruikt.
Aanbevolen procedures voor het werken met lokale SQL-databases
Hieronder volgt een lijst van suggesties voor technieken die u kunt toepassen om de prestaties, de beveiliging en het onderhoudsgemak van uw toepassingen te verhogen bij het werken met lokale SQL-databases.
Creëer vooraf databaseverbindingen
Zelfs als uw toepassing geen instructies uitvoert wanneer deze wordt geladen, maakt u een instantie van een SQLConnection-object en roept u de methode
open()
of
openAsync()
van de instantie zo vroeg mogelijk op (bijvoorbeeld onmiddellijk nadat de toepassing is gestart) om vertraging bij het uitvoeren van instructies te voorkomen. Zie
Verbinden met een database
.
Gebruik databaseverbindingen opnieuw
Als u tijdens de uitvoering van uw toepassing een bepaalde database benadert, zorgt u voor een verwijzing naar de SQLConnection-instantie en gebruikt u deze altijd opnieuw in de hele toepassing zodat u de verbinding niet elke keer hoeft te sluiten en weer te openen. Zie
Verbinden met een database
.
Gebruik bij voorkeur de asynchrone uitvoeringsmodus
Bij het schrijven van code voor het benaderen van gegevens kan het verleidelijk zijn om bewerkingen synchroon in plaats van asynchroon te laten uitvoeren omdat het gebruik van synchrone bewerkingen vaak kortere en minder complexe code vereist. Zoals is beschreven in
Synchrone en asynchrone databasebewerkingen gebruiken
kunnen synchrone bewerkingen de prestaties echter zo verminderen dat de gebruiker dit merkt, zodat het werken met uw toepassing minder aantrekkelijk wordt. De tijd die nodig is om één bewerking uit te voeren, is afhankelijk van de bewerking en met name van de hoeveelheid gegevens die moet worden verwerkt. Bijvoorbeeld: een SQL-instructie van het type
INSERT
die maar één rij aan de database toevoegt, heeft minder tijd nodig dan een instructie van het type
SELECT
die duizenden rijen gegevens moet ophalen. Wanneer u echter de synchrone modus gebruikt om meerdere bewerkingen uit te voeren, worden de bewerkingen doorgaans samengeperst. Zelfs als elke bewerking slechts een korte uitvoeringstijd heeft, blokkeert de toepassing tot alle synchrone bewerkingen zijn voltooid. Hierdoor is de totale uitvoeringstijd van meerdere samengeperste bewerkingen mogelijk lang genoeg om uw toepassing onbruikbaar te maken.
Gebruik daarom standaard de asynchrone modus, met name voor bewerkingen met een groot aantal rijen. Er bestaat een techniek om de verwerking van grote resultaatsets van de instructie
SELECT
te verdelen. Zie hiervoor
SELECT-resultaten in delen ophalen
. Deze techniek kan echter alleen in de asynchrone uitvoeringsmodus worden gebruikt. Gebruik alleen synchrone bewerkingen wanneer u een bepaald resultaat niet met asynchrone programmering kunt verkrijgen, wanneer u de afname aan prestaties waarmee de gebruikers van de toepassing worden geconfronteerd in overweging hebt genomen, en wanneer u de toepassing hebt getest zodat u weet wat de invloed op de prestaties van de toepassing zal zijn. Het gebruik van de asynchrone uitvoeringsmodus kan het coderen van de toepassing complexer maken. Vergeet echter niet dat u de code maar één hoeft te schrijven maar de gebruikers van uw toepassing deze vele keren moeten gebruiken, traag of snel.
In vele gevallen kan een groot aantal SQL-bewerkingen tegelijk in de wachtrij worden geplaatst wanneer u een aparte SQLStatement-instantie voor elke uit te voeren SQL-instructie gebruikt, waardoor asynchrone code op ongeveer dezelfde manier als synchrone code wordt geschreven. Zie
De asynchrone uitvoeringsmodus
voor meer informatie.
Gebruik aparte SQL-instructies en wijzig de eigenschap ‘text’ van de SQLStatement niet
Creëer voor elke SQL-instructie die meer dan één keer in de toepassing wordt uitgevoerd, een aparte SQLStatement-instantie voor elke SQL-instructie. Gebruik die SQLStatement-instantie elke keer dat de overeenkomstige SQL-opdracht wordt uitgevoerd. Als u bijvoorbeeld een toepassing schrijft met vier verschillende SQL-bewerkingen die meerdere keren worden uitgevoerd. In dat geval creëert u vier aparte SQLStatement-instanties en roept u de methode
execute()
van elke instructie op om deze uit te voeren. U kunt ook één SQLStatement-instantie voor alle SQL-instructies gebruiken, waarbij de eigenschap
text
van de instantie elke keer opnieuw wordt gedefinieerd voordat de instructie wordt uitgevoerd. Deze techniek wordt echter afgeraden.
Gebruik instructieparameters
Gebruik SQLStatement-parameters en voeg gebruikersinvoer niet samen tot instructietekst. Het gebruik van parameters maakt uw toepassing veiliger omdat het SQL-injectieaanvallen onmogelijk maakt. Hierdoor kunt u objecten gebruiken in query’s (in plaats van alleen literale SQL-waarden). Bovendien worden de instructies efficiënter uitgevoerd omdat ze opnieuw kunnen worden gebruikt zonder dat ze opnieuw hoeven te worden gecompileerd elke keer dat ze worden uitgevoerd. Zie
Parameters gebruiken in instructies
voor meer informatie.
|
|
|