Cet article nécessite une relecture technique. Voici comment vous pouvez aider.
Cet article nécessite une relecture rédactionnelle. Voici comment vous pouvez aider.
La méthode add()
de l'interface IDBObjectStore
fait une requête
pour ajouter un enregistrement au magasin d'objet relié
, un clone structuré de la valeur passé en paramètre et sa clé .
La réussite de la requête
dépend de la réussite de la transaction
. C'est à dire que l'événement success de la requête ne se déclenchera que si l'événement complete de la transaction se déclenche
La méthode add()
n'est qu'une reqête
d'insertion. Si un enregistrement existe déjà dans le magasin d'objet avec la même clé que celui qu'on veut ajouter , la requête échoue avec l'erreur ConstrainError
. Pour mettre à jour un enregistrement, on doit utilisé la méthode put()
.
Syntaxe
var requete = objectStore.add(valeur, cleOption);
Paramètres
- valeur
- Les données qu'on veut emmagasiné.
- cleOption
- Une clé utilisé pour identifier l'enregistrement (généré ou null si non spécifié).
Renvoie
Une requête
.
Exceptions
ReadOnlyError
- Cette
exception
est levé si la transaction associé à cette requête est enmode
lecture seule. TransactionInactiveError
- Cette
exception
est levé si latransaction
de l'accès
au magasin d’objet est inactive. DataError
- Cette
exception
est levé si:- On passe une clé en paramètre alors que le magasin d'objets utilise des clés internes.
- On ne passe pas de clé en paramètre alors que le magasin d'objets utilise des clés externes et n'as pas de générateur de clés.
- Le magasin d'objet utilise des clés internes sans générateur, et le nom de clé ne fournit pas une clé valide.
- On passe une clé invalide en paramètre.
InvalidStateError
- Cette
exception
est levé si le magasin d'objet a été supprimé. DataCloneError
- Cette
exception
est levé si les données que l'on veut emmagasiner ne peuvent pas être clonées (voir clone structuré, en)
Exemple
Dans le code suivant, on ouvre une connexion
à la base de donnée. Sur cette connexion on démarre une transaction
en lecture/écriture pour avoir un accès
au magasin d'objet "toDoList"
sur lequel on ajoute
un enregistrement.
La méthode add()
de l'accès au magasin d'objets fait une requête
pour ajouter le premier élément du tableau newItem
et sa clé dans le magasin d'objet toDoList
. La clé ici doit être fournie par un générateur de clé, c'est à dire que le magasin d'objets toDoList
s’incrémente automatiquement.
//Connexion à la base de données var DBOpenRequest = window.indexedDB.open("toDoList", 4); DBOpenRequest.onsuccess = function(event) { note.innerHTML += '<li>Connexion établie.</li>'; //Affecte la connexion à la variable db. db = DBOpenRequest.result; // Exécutez la fonction addData () pour ajouter un enregistrement au magasin d'objet addData(); }; function addData() { // un nouvel objet prêt à être emmagasiné newItem = [ { taskTitle: "Walk dog", hours: 19, minutes: 30, day: 24, month: "December", year: 2013, notified: "no" } ]; // ouvre une transaction de lecture / écriture prête au traitement des données sur la connexion var transaction = db.transaction(["toDoList"], "readwrite"); // en cas de succès de l'ouverture de la transaction transaction.oncomplete = function(event) { note.innerHTML += '<li>Transaction complété : modification de la base de données terminée.</li>'; }; // en cas d'échec de l'ouverture de la transaction transaction.onerror = function(event) { note.innerHTML += '<li>L\'erreur: "' + transaction.error +'" c\'est produite échec de la transaction.</li>'; }; // ouvre l'accès au un magasin "toDoList" de la transaction var objectStore = transaction.objectStore("toDoList"); //-> Ajoute un enregistrement var objectStoreRequest = objectStore.add(newItem[0]); objectStoreRequest.onsuccess = function(event) { // signale l'ajout de l'enregistrement note.innerHTML += '<li>Enregistrement ajouté.</li>'; }; };
Pour un exemple de travail complet, voir notre To-do Notifications app (view example live).
Spécification
Spécification | Statut | Commentaire |
---|---|---|
Indexed Database API La définition de 'add()' dans cette spécification. |
Recommendation |
Compatibilité avec les navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Support basique | 23webkit 24 |
10 moz 16.0 (16.0) |
10, en partie | 15 | 7.1 |
Disponible dans workers | (Oui) | 37.0 (37.0) | ? | (Oui) | ? |
Fonctionnalité | Android | Firefox Mobile (Gecko) | Firefox OS | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support basique | 4.4 | 22.0 (22.0) | 1.0.1 | 10 | 22 | 8 |
Disponible dans workers | (Oui) | 37.0 (37.0) | (Oui) | ? | (Oui) | ? |