db.transaction(), qui prend en argument une nouvelle fonction anonyme : ce
deuxième niveau d'imbrication pourra enfin effectuer des requêtes en base de données,
à l'aide de l'argument de transaction (conventionnellement nommé tx). Chaque requête
est effectuée par la méthode tx.executeSql().
Note > Le code source final de cet exemple est disponible dans le projet basiquebiblioapp .
var db = LocalStorage.openDatabaseSync(
name, ver, desc, size,
function (db) {
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE genres (' +
'genre_id INTEGER PRIMARY KEY,' +
'genre TEXT' +
');');
tx.executeSql('CREATE TABLE books (' +
'book_id INTEGER PRIMARY KEY,' +
'title TEXT,' +
'author TEXT,' +
'genre_id INTEGER' +
');');
tx.executeSql('INSERT INTO genres (genre) ' +
'VALUES ("(None)"), ("Biography") […]');
});
db.changeVersion("", ver);
}
);
Attention > Quand cette fonction est utilisée, le numéro de version est par défaut
défini à une valeur vide : en d'autres termes, l'argument de version passé à
LocalStorage.openDatabaseSync est ignoré quand une fonction lui est passée en argument. Il
faut donc changer manuellement ce numéro de version avec db.changeVersion(ancien,
nouveau).
Ensuite, pour le reste de l'exécution du programme, il est possible de créer des
transactions depuis l'objet db par sa méthode transaction(), comme précédemment.
La valeur de retour de tx.executeSql dépend de la requête exécutée (voir Tableau
17.1) et permet de vérifier que l'opération s'est déroulée avec le succès attendu. Par
exemple, pour l'insertion d'un genre dans la table correspondante, executeSql renvoie
l'identifiant du nouvel enregistrement, qui peut alors être utilisé dans la suite du
programme.
db.transaction(
function (tx) {
var id_nonfiction =
362
Précédent

- 363/494

Suivant