Pour obtenir les informations du schéma d’une vue d’une base de données, utilisez la méthode
En général, le code du développeur ne construit pas directement d’occurrences SQLViewSchema.
Pour obtenir les informations du schéma des colonnes pour une ou plusieurs tables de base de données, utilisez la méthode
En général, le code du développeur ne construit pas directement d’occurrences SQLColumnSchema.
Si le jeu de résultats contient plusieurs colonnes portant le même nom, une seule propriété portant ce nom est ajoutée à l’objet de résultat. La valeur affectée à cette propriété provient de la dernière colonne portant ce nom dans la ligne de résultats. Examinons par exemple l’instruction
SELECT customers.customerId, addresses.customerId FROM customers INNER JOIN addresses ON customers.customerId = addresses.customerId
Lorsque cette instruction est exécutée sur une occurrence SQLConnection avec un format de nom de colonne court, chaque objet de résultat a une propriété nommée
Pour obtenir les informations du schéma d’une base de données, utilisez la méthode
En général, le code du développeur ne construit pas directement d’occurrences SQLSchema.
Par exemple, si un index de base de données est créé avec l’instruction SQL suivante, la valeur de la propriété
Par exemple, si un index de base de données est créé par l’instruction SQL suivante :
la propriété
Ces valeurs représentent les différents ordres de classement pouvant être spécifiés pour une colonne dans une table de la base de données. Un ordre de classement est une façon de trier et de comparer les données, par exemple en indiquant si la base de données fait la différence entre les caractères majuscules et minuscules.
Pour plus d’informations sur la définition et l’utilisation des ordres de classement, voir la section « COLLATE » dans l’annexe «
Lorsqu’un classement binaire est utilisé avec des valeurs de la classe de stockage
Pour récupérer l’occurrence SQLSchemaResult d’un appel à
La fonctionnalité de la classe SQLConnection appartient à plusieurs catégories :
Un fichier de base de données SQL locale est créé ou ouvert en appelant la méthode
La classe SQLConnection fournit également l’état des instructions SQL, y compris un mécanisme permettant d’exécuter plusieurs instructions dans une transaction. Les transactions sont gérées à l’aide des méthodes
La classe SQLConnection fournit un accès aux informations du schéma de base de données pour les bases de données connectées. Le schéma d’une base de données décrit les définitions de ses tables, colonnes, indices et déclencheurs. Reportez-vous à la méthode
La classe SQLConnection permet de chiffrer les bases de données à l’aide de AES avec CCM. Cela permet d’authentifier les données et d’en assurer la privacité. Pour chiffrer une base de données, une clé de 16 octets doit être spécifiée (à l’aide d’un ByteArray) lors de la création de la base de données. Cette clé peut être modifiée ultérieurement à l’aide de la méthode
Une occurrence de SQLConnection peut être utilisée pour recevoir des notifications d’événement au niveau de la base de données et permettre de contrôler la configuration de tous les aspects d’une base de données, notamment la taille de la page de cache, l’annulation de processus et les options d’exécution des instructions.
Une occurrence
Lorsque vous utilisez l’exécution asynchrone, vous utilisez des écouteurs d’événement ou une occurrence Responder pour déterminer le moment où une opération se termine ou échoue. Les opérations s’exécutent en arrière-plan plutôt que dans le thread principal de l’application ; ainsi, l’application continue de s’exécuter et de répondre aux interactions de l’utilisateur même pendant l’exécution des opérations de la base de données. Chaque occurrence de SQLConnection asynchrone exécute les instructions SQL dans son propre thread.
En mode d’exécution asynchrone, vous commencez une opération spécifique en appelant la méthode appropriée, et vous pouvez détecter la fin (ou l’échec) de l’opération en enregistrant un écouteur pour l’événement approprié. Chaque opération est associée à un événement qui se déclenche lorsque l’opération se termine avec succès. Par exemple, lorsqu’un appel de la méthode
Lorsque vous utilisez une exécution synchrone, il n’est pas nécessaire d’enregistrer des écouteurs d’événement pour déterminer le moment où une opération se termine ou échoue. Pour identifier les erreurs, placez les instructions rejetant l’erreur dans un bloc
Le nom de cette fonction n’a aucune importance.
Les fonctions de membres de niveau classe n’étant pas soumises au nettoyage, vous pouvez définir
Après l’enregistrement d’un écouteur d’événement, vous ne pouvez plus modifier sa priorité par d’autres appels de
N’oubliez pas qu’une fois l’écouteur enregistré, tous les prochains appels de
Il est impossible d’enregistrer un écouteur d’événement uniquement pour la phase cible ou la phase de propagation vers le haut. Ces deux phases sont associées pendant l’enregistrement car la propagation vers le haut s’applique uniquement aux ancêtres du nœud cible.
Si vous n’avez plus besoin d’un écouteur d’événements, supprimez-le en appelant
Lors de la copie d’une occurrence d’EventDispatcher, les écouteurs d’événement qui lui sont associés ne sont pas pris en compte (si le nouveau nœud nécessite un écouteur d’événement, vous devez associer celui-ci après la création du nœud). Toutefois, si vous déplacez une occurrence d’EventDispatcher, les écouteurs d’événement qui lui sont associés la suivent.
Si un écouteur d’événement est enregistré sur un nœud alors qu’un événement est en cours de traitement sur ce nœud, l’écouteur n’est pas déclenché pendant la phase actuelle, mais il peut l’être pendant une phase ultérieure du flux d’événements, telle que la phase de propagation vers le haut (bubbling).
Si un écouteur d’événement est supprimé d’un nœud sur lequel un événement est en cours de traitement, il est cependant déclenché par les actions en cours. Une fois supprimé, l’écouteur d’événement n’est plus jamais appelé (à moins d’être réenregistré à des fins de traitement ultérieur).
Si des indices ont été définis pour une base de données mais que la méthode
Lorsque les données d’une table changent (après des instructions
Le paramètre
A chaque appel de cette méthode, toutes les données statistiques précédemment créées sont purgées et recréées pour la base de données ou la table spécifiée dans le paramètre
Pour supprimer les données statistiques créées avec la méthode
Si la valeur du paramètre est
Pour qu’une clé de chiffrement soit valide, sa longueur doit être de 16 octets. Une base de données en mémoire ne peut pas être chiffrée ; par conséquent, ce paramètre doit être
Lorsque vous joignez une base de données chiffrée, si la clé de chiffrement fournie ne correspond pas à celle de la base de données, une exception est renvoyée. En mode d’exécution synchrone, une exception SQLError est renvoyée. En mode d’exécution asynchrone, un SQLErrorEvent est distribué et la propriété
Le paramètre
Si une base de données est déjà associée à l’aide du nom spécifié, un appel à
Toute instruction SQL peut être exécutée sur une base de données connectée par la méthode
Pour supprimer une base de données associée à l’aide de la méthode
La base de données associée utilise le même mode d’exécution (synchrone ou asynchrone) que la base de données principale, selon que cette dernière a été connectée à l’aide de la méthode
La valeur par défaut (
Par défaut, chaque instruction SQL est exécutée dans sa propre transaction et celle-ci se termine lorsque l’exécution de l’instruction réussit ou échoue. La création d’une transaction à l’aide de la méthode
Pour terminer une transaction, appelez la méthode
Les appels imbriqués à
Si la connexion à la base de données se ferme lorsqu’une transaction est en cours, AIR restaure automatiquement la transaction (remarque : pour AIR 1.1 et versions antérieures, une transaction en cours est automatiquement validée lorsqu’une connexion se ferme).
Une transaction n’est pas limitée aux exécutions d’instructions dans une seule base de données, mais peut comprendre des instructions exécutées sur d’autres bases de données associées.
Si des instructions s’exécutent lors de l’appel à
Si une transaction est ouverte lors de l’appel de la méthode
Il est possible de créer des points de sauvegarde intermédiaires, semblables aux signets dans une transaction, en appelant la méthode
Si une transaction utilise des points de sauvegarde, les instructions qui ont été restaurées à l’aide de la méthode
L’opération
Les statistiques générées par la méthode
Cette opération n’est pas incluse dans une transaction active.
Lorsque la connexion à la base de données est fermée, la méthode renvoie
Si la valeur spécifiée n’est pas valide, un événement
Si l’argument
Pour accéder au schéma chargé, utilisez la méthode
En mode d’exécution asynchrone, un événement
La combinaison des valeurs des paramètres
Si la combinaison d’arguments
Si la base de données est vide (elle ne contient pas de table, ni de vue, ni de déclencheur, ni d’indice), l’appel de la méthode
Ce paramètre est ignoré lorsque le paramètre
Pour qu’une clé de chiffrement soit valide, sa longueur doit être de 16 octets. Une base de données en mémoire ne peut pas être chiffrée ; par conséquent, ce paramètre doit être
Lors de l’ouverture d’une base de données chiffrée, si la clé de chiffrement fournie ne correspond pas à celle de la base de données, une exception SQLErrorEvent est renvoyée. La propriété
Le paramètre
Après la connexion d’une base de données, utilisez une occurrence de
Une base de données connectée avec la méthode
Ce paramètre est ignoré lorsque le paramètre
Pour qu’une clé de chiffrement soit valide, sa longueur doit être de 16 octets. Une base de données en mémoire ne peut pas être chiffrée ; par conséquent, ce paramètre doit être
Lors de l’ouverture d’une base de données chiffrée, si la clé de chiffrement fournie ne correspond pas à celle de la base de données, une exception SQLError est renvoyée. Le cas échéant, la propriété
Le paramètre
Après la connexion d’une base de données, utilisez une occurrence de
Une base de données connectée avec la méthode
La nouvelle tentative de chiffrement est exécutée dans sa propre transaction. Si la nouvelle tentative de chiffrement est interrompue, la base de données restaure la transaction et la clé de chiffrement reste inchangée.
Notez que jusqu’à ce que l’ensemble de la transaction soit validée, les modifications ne sont pas définitivement enregistrées dans la base de données. Si la transaction est lancée à l’aide de la méthode
Si le code appelle la méthode
Si cette méthode est appelée sans paramètre (ou si le paramètre
Si le paramètre
Après la publication ou la restauration d’un point de sauvegarde, ce dernier, ainsi que les points de sauvegarde plus récents, sont supprimés. Si le code exécute d’autres opérations SQL après qu’un appel à
Notez que si l’ensemble de la transaction est validée via l’appel de la méthode
Si cette méthode est appelée sans paramètre (ou si le paramètre
Si le paramètre
Après la publication ou la restauration d’un point de sauvegarde, ce dernier, ainsi que les points de sauvegarde plus récents, sont supprimés. Si le code exécute d’autres opérations SQL après qu’un appel à
Les points de sauvegarde intermédiaires peuvent être marqués au sein d’une transaction via un appel de la méthode
Si le nom fourni est le même que celui d’un point de sauvegarde précédent, l’appel suivant de la méthode
La valeur du paramètre
Lors de l’appel de la méthode
Notez que jusqu’à ce que l’ensemble de la transaction soit validée, les modifications ne sont pas définitivement enregistrées dans la base de données. Si la transaction est lancée à l’aide de la méthode
Vous pouvez attribuer un nom à un point de sauvegarde en affectant une valeur au paramètre
Après la publication ou la restauration d’un point de sauvegarde, ce dernier, ainsi que les points de sauvegarde plus récents, sont supprimés. Si le code exécute d’autres opérations SQL après qu’un appel à
Si la propriété
Les constantes définies dans la classe SQLColumnNameStyle représentent les valeurs possibles pour cette propriété :
La valeur est zéro si aucune base de données n’est connectée ou si aucune instruction
L’identifiant de ligne pour une seule exécution de l’instruction SQL
Pour plus d’informations sur les clés primaires et les identifiants de ligne générés, voir les sections «
Si la propriété
La taille de la page d’une base de données peut être modifiée (à l’aide des méthodes
Lorsque la connexion à la base de données est fermée, la valeur est réinitialisée sur 0. Lorsque l’occurrence de SQLConnection n’est pas connectée à une base de données, la valeur est 0.
Pour obtenir les informations du schéma des déclencheurs d’une base de données, utilisez la méthode
En général, le code du développeur ne construit pas directement d’occurrences SQLTriggerSchema.
Une occurrence SQLStatement est reliée à une occurrence SQLConnection en définissant l’occurrence SQLConnection comme valeur de la propriété
Pour obtenir une description complète du dialecte SQL pris en charge par les bases de données SQL locales, consultez l’annexe
En mode d’exécution asynchrone, les méthodes
Aucun événement n’est déclenché en réponse directe à l’achèvement de l’opération
Lorsque l’instruction SQL est une requête
Si l’argument
Pour accéder aux résultats d’une instruction, notamment aux lignes de résultats d’une instruction
Chaque instruction doit être préparée (compilée) avant de pouvoir être exécutée. Lors du premier appel de la méthode
Lorsqu’une instruction
Lorsqu’un argument
Notez qu’à moins d’être supprimés par un appel de
En mode d’exécution asynchrone, si l’argument
Cette méthode ne peut être appelée que si l’instruction est encore en exécution. Lorsque l’instruction est une requête
Cette propriété est true si la méthode
Par défaut, chaque ligne renvoyée par une instruction
En spécifiant la classe de la propriété
Toute classe affectée à cette propriété doit avoir un constructeur qui ne requiert aucun paramètre. En outre, la classe doit avoir une seule propriété pour chaque colonne renvoyée par l’instruction
Dans le texte d’une instruction SQL, un paramètre est indiqué avec l’un des caractères suivants : « ? », « : » ou « @ ».
Les jetons « : » et « @ » indiquent un paramètre nommé ; les caractères qui suivent le jeton désignent le nom du paramètre.
Par exemple, dans l’instruction SQL suivante, un paramètre nommé
SELECT FROM employees WHERE firstName = :firstName
Le jeton « ? » indique un paramètre indexé (numéroté) ; chaque paramètre se voit automatiquement attribué un index en fonction de la séquence des paramètres du texte de l’instruction. Les valeurs d’index des paramètres sont de base zéro. En d’autres termes, le premier index de paramètre est 0.
Les paramètres autorisent la substitution avec type de valeurs inconnues au moment de la construction de l’instruction SQL. L’utilisation des paramètres est le seul moyen de garantir la classe de stockage d’une valeur transmise à la base de données. Lorsque des paramètres ne sont pas utilisés, toutes les valeurs sont converties de leur représentation texte en une classe de stockage en fonction de l’affinité du type de la colonne associée. Pour plus d’informations sur les classes de stockage et l’affinité des colonnes, voir la section « Prise en charge des types de données » dans l’annexe «
Les paramètres sont également utilisés comme mesure de sécurité pour empêcher une technique malveillante appelée attaque par injection de code SQL. Dans une attaque par injection de code SQL, l’utilisateur entre du code SQL dans un emplacement accessible (par exemple dans un champ de saisie de données). Si le code de l’application construit une instruction SQL en concaténant directement la saisie de l’utilisateur dans le texte SQL, le code SQL saisi par l’utilisateur est exécuté sur la base de données. L’exemple suivant illustre la concaténation de la saisie de l’utilisateur dans le texte SQL. N’utilisez pas cette technique :
L’utilisation des paramètres d’instruction à la place de la concaténation des valeurs entrées par l’utilisateur dans le texte d’une instruction empêche les attaques par injection de code SQL car les valeurs des paramètres sont traitées explicitement sous forme de valeurs substituées au lieu de devenir une partie du texte de l’instruction littérale. L’exemple suivant est l’alternative recommandée :
Toutes les valeurs des paramètres doivent être définies avant l’exécution de l’instruction. Les valeurs des paramètres spécifiés dans le tableau
Pour effacer toutes les valeurs de paramètres de la propriété
Le texte peut être n’importe quel code SQL pris en charge. Pour obtenir une description complète du dialecte SQL pris en charge par les bases de données SQL locales, consultez l’annexe «
Prise en charge du profil AIR : cette fonctionnalité est prise en charge sur tous les systèmes d’exploitation de bureau, mais ne l’est pas sur les périphériques mobiles ou les périphériques AIR pour TV. Vous pouvez tester la prise en charge lors de l’exécution à l’aide de la propriété
AIR fournit un magasin local chiffré pour chaque application AIR installée sur l’ordinateur de l’utilisateur. Vous pouvez ainsi enregistrer et extraire les données stockées sur le disque dur local de l’utilisateur dans un format chiffré, que d’autres utilisateurs ne peuvent pas déchiffrer facilement. Un magasin local chiffré distinct est utilisé pour chaque application AIR et chacune d’elle fait appel à un magasin local chiffré pour chaque compte utilisateur de l’ordinateur.
Utilisez le magasin local chiffré pour mettre en mémoire cache des informations à sécuriser, telles que les informations de connexion aux services Web. Le magasin local chiffré convient au stockage des informations devant rester confidentielles. En revanche, il ne permet pas de protéger les données des autres processus exécutés sous le même compte utilisateur. Il n’est donc pas approprié pour protéger les données secrètes d’une application, notamment les mots de passe DRM ou les clés de chiffrement.
Pour associer le magasin local chiffré à chaque application et chaque utilisateur, AIR utilise DPAPI sous Windows, KeyChain sous Mac OS et KeyRing ou KWallet sous Linux. Le magasin local chiffré utilise un cryptage AES-CBC de 128 bits.
Les informations conservées dans le magasin local chiffré ne sont disponibles que pour le contenu de l’application AIR dans le sandbox de sécurité de l’application.
Si vous mettez à jour une application AIR, la version mise à jour conserve l’accès à toutes les données existantes dans le magasin local chiffré, sauf dans les cas suivants :
Restrictions du magasin local chiffré
Les données contenues dans le magasin local chiffré sont protégées par les informations d’identification du compte du système d’exploitation de l’utilisateur. Les autres entités ne peuvent pas accéder aux données contenues dans le magasin, à moins qu’elles soient en mesure d’utiliser les informations d’identification de cet utilisateur pour se connecter. Il est néanmoins possible que d’autres applications exécutées par un utilisateur authentifié puissent accéder aux données. Par conséquent, les données que votre application souhaite garder secrètes, telles que les clés utilisées pour l’obtention de licences ou la gestion des droits numériques, ne sont pas sécurisées. Le magasin local chiffré n’est pas un emplacement approprié pour le stockage de ces informations. Il convient uniquement au stockage des données privées d’un utilisateur, telles que les mots de passe.
Les données contenues dans le magasin local chiffré peuvent être perdues pour plusieurs raisons. Par exemple, l’utilisateur n’a pas pu désinstaller l’application et supprimer le fichier chiffré. Ou l’ID de l’éditeur a été modifié suite à une mise à jour. Par conséquent, le magasin local chiffré doit être considéré comme une mémoire cache privée et non comme un emplacement de stockage permanent.
Le paramètre
Le magasin local chiffré peut s’exécuter plus lentement si les données stockées dépassent 10 Mo.
Lorsque vous désinstallez une application AIR, le programme de désinstallation ne supprime pas les données stockées dans le magasin local chiffré.
Voici les normes de bonne pratique concernant l’utilisation du magasin local chiffré :
Les éléments du magasin local chiffré sont identifiés par une chaîne. Tous les éléments sont stockés sous forme de données de tableau d’octets.
Les données du magasin local chiffré sont placées dans un sous-répertoire du répertoire de données de l’application de l’utilisateur ; le chemin du sous-répertoire est Adobe/AIR/ELS/suivi de l’ID de l’application.
Si un élément n’existe pas avec le paramètre name spécifié, cette méthode renvoie
Pour obtenir des informations de schéma d’index pour une base de données, utilisez la méthode
En général, le code du développeur ne construit pas directement d’occurrences SQLIndexSchema.
Pour obtenir les informations du schéma des tables d’une base de données, utilisez la méthode
En général, le code du développeur ne construit pas directement d’occurrences SQLTableSchema.
L’occurrence SQLResult d’une instruction SQL est accédée par un appel à la méthode
Vous utilisez un objet SQLResult pour accéder aux lignes de données renvoyées par une instruction
Lorsqu’une instruction renvoie une ou plusieurs lignes, cette propriété indique si toutes les lignes ont été renvoyées. Lorsque la méthode
Notez que, le nombre de lignes étant inconnu au moment de l’exécution, le curseur de la base de données doit se déplacer au-delà de la dernière ligne pour que l’exécution d’une instruction soit considérée comme complète. Lorsque la méthode
Lorsqu’une instruction renvoie une ou plusieurs lignes, cette propriété est un tableau contenant les objets qui représentent les lignes de données de résultat. Chaque objet dans le tableau possède des noms de propriété qui correspondent aux noms des colonnes du jeu de résultats.
Par exemple, supposons que vous exécutez l’instruction SQL
En supposant que la table
La situation est plus complexe lorsque vous utilisez une instruction
Dans les résultats de cette instruction, chaque objet du tableau
Dans le tableau
La propriété
Après avoir exécuté la requête, la propriété
Si plusieurs noms de colonne sont dupliqués dans les données de résultat, notamment si l’instruction
Par défaut, les objets du tableau
Lorsque l’instruction ne renvoie aucune donnée, cette propriété est
La valeur est 0 si l’instruction exécutée n’était pas une instruction
Un identifiant de ligne est utilisé pour identifier une ligne de façon unique dans un tableau au sein d’une base de données. La valeur est générée fréquemment par la base de données.
Pour plus d’informations sur les clés primaires et les identifiants de ligne générés, voir les sections « CREATE TABLE » et « Expressions » dans l’annexe «
Les modifications auxiliaires causées par des déclencheurs ne sont pas prises en compte. Pour connaître le nombre total de modifications, y compris dues à des déclencheurs, utilisez la propriété
Notez que, lorsque l’opération SQL associée est une instruction