· Tech watch

Utilisation de la base de données locale Google Gears

Il y a quelques semaines, Google Gears faisait son apparition, proposant ainsi une solution au problème des applications Web en mode déconnecté [voir le billet de Nicolas Perriault intitulé « [ »]]. Google Gears permet (entre autres), de stocker des informations dans une base de données Sqlite (version 3.3.17) installée sur le poste client via une extension Firefox ou Internet Explorer.

Initialisation et connexion au serveur local

Dans un premier temps, il convient d’inclure un fichier javascript d’initialisation fourni par Google :

<script type="text/javascript" src="js/gears_init.js"></script>

Ensuite, il est nécessaire de vérifier que l’extension est bien présente sur le navigateur et que l’accès à celle-ci a bien été autorisé par l’utilisateur :

if (!window.google || !google.gears)<em>/* Redirection, avertissement etc. */
</em>

On peut alors créer une connexion à la base de données et l’ouvrir :

var db = google.gears.factory.create('beta.database', '1.0') ;
db.open('dbName') ;

Exécution de requêtes

Sqlite interprète correctement la plupart des instructions SQL92. Cependant certaines d’entre elles ne sont pas entièrement prises en charge (voir le site officiel). Pour exécuter une requête il suffit de faire appel à la méthode execute de l’objet db :

id = ...
nom = ...
try<em>db.execute("create table user(id varchar(255), name varchar(255))") ;
db.execute("insert into user value( ?, ?),[id,nom]") ;
</em>
catch(err)<em>alert(err.message) ;
</em>

En plaçant un bloc try-catch, une exception sera levée et le message d’erreur correspondant sera affiché si la requête est erronée. L’API supporte les variables attachées (bind parameters) : dans la requête INSERT, les points d’interrogation sont substitués par les variables passées en second paramètre. L’utilisation des variables attachées est vivement conseillée puisqu’elle permet d’échapper automatiquement les chaînes, améliore les performances et la lisibilité du code.

Un outil Web compris dans les exemples et outils de Google Gears vous permettra d’exécuter des requêtes de test ou de maintenance tel qu’on le ferait avec phpmyadmin par exemple. Notez le style très épuré de l’interface :

Peut-être préférerez-vous une interface plus riche, telle SQLAdmin for Gears développée avec Flex par Christophe Coenraets.

Récupération et affichage d’un jeu de données

La récupération de données est semblable à celle présente dans la plupart des langages. Elle fonctionne au moyen de jeux d’enregistrement (RecordSet). Dans un premier temps, on place les données issues d’un SELECT dans le RecordSet (rs dans notre cas), puis on accède aux enregistrements au moyen de la méthode field :

try
<em>var rs = db.execute('select * from user') ;
while (rs.isValidRow()) {
document.write(rs.field(0)+' '+rs.field(1)) ;
rs.next() ;
</em>
rs.close() ;
}
catch(err)<em>alert(err.message) ;
</em>

Attention, il est indispensable de fermer tout RecordSet ouvert. Dans le cas contraire, les tables auxquelles vous accéderez pourraient être verrouillées par Sqlite (auquel cas une exception sera générée).

Import de données volumineuses

Si l’on doit importer un grand nombre de données au moyen de requêtes INSERT (lors d’une synchronisation par exemple), il est préférable d’utiliser les transactions SQL, sans quoi les performances seront considérablement réduites. Exemple :

db.execute("BEGIN") ;
try<em>for (i=0;i<=id.length;i++)
db.execute("insert into user values( ?, ?)",<a href="http://code.google.com/apis/gears/api_database.html">id[i] name[i]]) ;
</em>
catch(err)
<em>db.execute("ROLLBACK") ;
alert(err.message) ;
</em>

db.execute("COMMIT") ;

De par sa facilité d’utilisation, la base de données locale peut donc se révéler être très utile pour l’utilisation d’applications Web en mode déconnecté, ou pour améliorer la réactivité d’une application.

Pour plus d’informations : [http://code.google.com/apis/gears/api_database.html

3 commentaires

  1. Stocker de l’information sous forme centralisée, c’est bien.
    Stocker de l’information sous forme décentralisée, c’est mieux.

    Déclarer des infomations personnelles stockées sous forme centralisée, c’est bien.
    Déclarer des infomations personnelles stockées sous décentralisée, c’est…le début de la galère ?

    Un site pourra enregistrer (sur le poste client) des informations personnelles à l’insu du surfeur cryptées ou non ; de toute façon le code source d’exploitation des données demeure en clair.

    Google Gears c’est techniquement super…légalement, ca risque coincer aux entournures :-(

    Que la « foire à la donnée » commence ;-)

  2. Excellente introduction à gears, merci!

  3. je ne suis pas développeur mais je me débrouille bien avec excel que je souhaite utiliser pour contrôle , reporting et calculs divers à partir d’éléments de plusieurs agendas google . Avec google gears je pense qu’il doit être possible de créer un lien odbc entre la base locale sqlite localserver.db et une feuille excel . j’ai télécharger le driver odbc mais je n’arrive pas à créer le lien . Y a t-il un problème de protection de la base par google ?

Les commentaires sont désormais fermés.