Le composant database met à la disposition du code JavaScript une base de données de type relationnel, provenant du projet Open Source SQLite. Afin d’obtenir une instance de cet objet on procède comme précédemment :
var db = google.gears.factory.create
(‘beta.database’, ‘1.1’) ;
Nous pouvons maintenant établir une connexion à la base de données et exécuter des requêtes SQL :
db.open('twitygears');
db.execute('create table if not exists
twitmsg (data TEXT, timestamp INT)');
| La méthode ‘execute’ permet des requêtes paramétrées ce qui évite l’injection d’attaques SQL |
La méthode ‘execute’ permet des requêtes paramétrées ce qui évite l’injection d’attaques SQL. Ce type d’attaque, fréquent dans les applications Web, correspond à une erreur dans la protection des données d’entrées de la requête. Cela "permet" à celui qui connaît cette faille d’exécuter n’importe quelle requête sur la base de données (imaginez les conséquences d’un "DELETE * FROM…" sur les données).
// insertion
db.execute('INSERT INTO twitmsg VALUES
(?, ?)', [message, currTime]);
// sélection
var rs = db.execute('SELECT * FROM twitmsg
ORDER BY timestamp');
while (rs.isValidRow()) {
alert(rs.field(0) + “ correspond à ”
+ rs.fieldName(0));
rs.next();
}
rs.close();
Le résultat renvoyé par une requête type ‘SELECT’ est de type ‘ResultSet’. Nous pouvons itérer dessus et lire les données de chaque ligne. Les méthodes ‘field()’ et ‘fieldName()’ nous permettent de lire la valeur et le nom du champ indexé.
Comme nous le connaissons de certaines bases de données, Google Gears rajoute lui aussi une colonne ‘ROWID’ à chaque table.
Ainsi après l’ajout d’une nouvelle ligne de données, l’attribut ‘lastInsertRowId’ contenant la valeur du dernier ‘ROWID‘ est incrémenté automatiquement.
Il est à noter que SQLite peut supporter le mode transactionnel afin de garder un système de données cohérent.