Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Adobe AIR et SQL lite

Compatible AIR. Cliquer pour en savoir plus sur les compatibilités.Compatible ActionScript 3. Cliquer pour en savoir plus sur les compatibilités.Par wjm (Jean-Marc), le 20 juillet 2008

Bonjour, dans ce tutoriel nous allons voir comment insérer, supprimer, modifier et récupérer des données depuis une application Adobe AIR dans SQL lite.

Vous aurez donc besoin de :

- Adobe Flex Builder, ou de l’extension pour Eclipse. Ils sont téléchargeables sur le site de Adobe (http://www.adobe.com/fr/products/flex/)
- Le moteur d’exécution de Adobe AIR (http://www.adobe.com/products/air/)
- Sqlite qui est téléchargeable à l’adresse suivante : http://www.sqlite.org/
- SQLite Administrator (http://sqliteadmin.orbmu2k.de/)

1. SQLite : SQLite est une libraire multiplateforme écrite en C qui implémente un moteur de base de données SQL. Il n’y a aucune installation ni configuration de requise, toute la base de donnée ce résume sous forme d’un simple et unique fichier. Il est donc très aisé de l’embarquer dans une application AIR.

La plus part des fonctionnalités de la norme SQL 92 sont prises en compte à l’exception de quelques unes répertoriées à l’adresse suivante : http://www.sqlite.org/omitted.html.

Il est également possible de télécharger un outil d’administration pour SQLite à l’adresse donnée ci-dessus. Il permet de facilement créer, designer et administrer un fichier de base de données. Nous allons d’ailleurs l’utiliser dans notre tutoriel pour créer nos objets (tables, vues, etc…), bien que l’on puisse tout effectuer avec des instructions SQL depuis AIR, c’est quand même plus agréable avec cet outil.

2. Adobe AIR : Adobe AIR permet de créer des applications de bureau, et gère nativement SQLite. Le moteur d’exécution d’Adobe AIR contient des classes qui permettent de facilement accéder au fichier de la base de données et de lancer des requêtes SQL.

3. Exemple : Nous allons donc commencer par créer une base de données avec l’outil d’administration. Pour cela, il suffit de cliquer sur le menu «Base de donnée» –> «Nouvelle», de la nommer, par exemple, «myDBTest» et de l’enregistrer.



Vous avez donc maintenant l’arborescence de votre base de données, il ne nous reste plus qu’à ajouter les objets que l’on désire. Pour ajouter une table, il suffit de cliquer sur le menu « Table » –> »Nouvelle » et de la nommer, par exemple « Employee ». Il faut ensuite ajouter des champs, pour notre exemple, nous allons créer 3 champs :

- Le premier ID qui est un integer autoincrémenté, et qui sera notre clé primaire. - Le second LastName qui est un varchar avec une taille de 50 caractères. - Le troisième FirstName qui est également un varchar de 50 caractères.

Nous avons donc le code suivant :

CREATE TABLE [Employee] (
[ID] INTEGER  NOT NULL PRIMARY KEY,
[LastName] VARCHAR(50)  NULL,
[FirstName] VARCHAR(50)  NULL
)



Vous pouvez aussi directement coller le SQL ci-dessus dans l’onglet « Requête SQL » et cliquer sur « Exécuter la requête », qui aura pour effet de créer votre table.

Nous avons donc maintenant une base de données « MyDBTest.s3db » avec une table « Employee », cela est suffisant pour notre exemple.

Il est temps maintenant de créer notre projet AIR, pour cela il faut lancer Flex Builder ou Eclipse, et cliquer sur le menu « File » –> « New » –> »Flex project », nommer votre projet « MyProject »

N’oubliez pas de sélectionner « Desktop application (runs in Adobe AIR) », vous aurez ainsi une application de bureau (AIR).

Créer ensuite un répertoire « db » dans votre projet, dans lequel vous allez placer le fichier de votre base de données.

Pour accéder à la base de données, nous allons faire appel à la classe File qui permet d’obtenir le chemin de répertoires spéciaux, comme le répertoire de l’utilisateur, le répertoires « Mes documents » de l’utilisateur, le répertoire de l’application, ainsi que le répertoire depuis laquelle l’application est lancée.

Chaque objet File a deux propriétés qui lui permettent de définir son chemin :
- nativePath - URL
Pour accéder au répertoire de l’utilisateur (“C\:Documents and settings\userNames”), ont procédera comme suit :

var file:File=File.userDirectory.resolvePath("MyDBTest.s3db");



Pour accéder au répertoire des documents de l’utilisateur (“C\:Documents and settings\userNames\My Documents”), ont procédera comme suit :

var file:File=File.documentsDirectory.resolvePath("MyDBTest.s3db");



Pour accéder à des documents sur le bureau :

var file:File=File.desktopDirectory.resolvePath("MyDBTest.s3db")



Pour accéder au répertoire de l’application :

var file:File=File.applicationDirectory.resolvePath("MyDBTest.s3db")



Pour accéder au répertoire de stockage de l’application (“User Name\Application Data\Application.Id.publisher.ID\Local Store”):

var file:File=File.applicationStorageDirectory.resolvePath(«MyDBTest.s3db »)



Et pour finir, on peut également accéder à n’importe quel répertoire, de la façon suivante :

var file:File=new File() ;
file.nativePath="C:/Mon repertoire/" ;



C’est cette dernière méthode, que nous allons utiliser dans notre exemple :

var dataFile:File=new File()
dataFile.nativePath="C:/Inetpub/wwwroot/Flex/MyProjects/db/MyDBTest.s3db"



Il faut ensuite ouvrir la connexion à la base de données :

dbConn = new SQLConnection();
dbConn.open(dataFile,FileMode.UPDATE);



Il existe deux modes de connexion à la base de données :

- Synchrone (dbConn.open(myDBFile)), dans ce cas-ci, l’application est bloquée jusqu’à ce que le résultat soit disponible. - Asynchrone (dbConn.openAsync(myDBFile)), dans ce cas-ci l’application continue, même si le resultat n’est pas encore disponible.
La connexion à la base de données reste ouverte jusqu’à ce que vous la fermiez à l’aide de l’instruction suivante :

dbConn.close() ;



La classe FileMode définissant la manière dont va être ouvert le fichier, il existe 4 modes qui sont :

- APPEND : le fichier est ouvert en écriture, les écritures sont ajoutées à la fin du fichier. - READ : le fichier est ouvert en écriture seulement. - UPDATE : le fichier est ouvert en lécture et en écriture. - WRITE : le fichier est ouvert en écriture seulement

Nous allons voir maintenant comment insérer un enregistrement dans la base de données, à l’aide de la classe SQLstatement :

var stmt1:SQLStatement = new SQLStatement();
stmt1.text = "INSERT INTO Employee (LastName, FirstName) VALUES ('Dupont', 'Jean')";
stmt1.sqlConnection = dbConn;
stmt1.execute();



Comme vous pouvez le constater, c’est vraiment très simple. Il suffit de spécifier la requête SQL ainsi que la connexion à utiliser. Il en est de même pour modifier un enregistrement :

var stmt2:SQLStatement = new SQLStatement();
stmt2.text = "UPDATE Employee SET LastName='Dupond'";
stmt2.sqlConnection = dbConn;
stmt2.execute();



Supprimer un enregistrement :

var stmt3:SQLStatement = new SQLStatement();
stmt3.text = "DELETE FROM Employee WHERE LastName='Dupond'";
stmt3.sqlConnection = dbConn;
stmt3.execute();



pour sélectionner des enregistrements, c’est tout aussi facile, mais nous allons voir comment utiliser des paramètres pour nous protéger des injections SQL :

var stmt2:SQLStatement = new SQLStatement();
stmt2.text = "SELECT * FROM Employee WHERE LastName=@LastName";
stmt2.parameters["@LastName"]= "Dupond"
stmt2.sqlConnection = dbConn;
stmt2.execute();



la fonction peut accueillir un paramètre, qui permet de spécifier le nombre d’enregistrement que vous voulez lorsque vous exécutez un SELECT :

stmt2.execute(10);



Pour obtenir les prochains enregistrements, il suffit de faire :

stmt2.next();



Pour récupérer les résultats du Select :

var result :Array=stmt2.getResults().data;

Vous pouvez télécharger le code source ici.