Heim >Web-Frontend >H5-Tutorial >Eingehende Analyse der Tutorialfähigkeiten der IndexedDB-Indexdatenbank_html5 von HTML5
Einführung
IndexedDB ist eine HTML5-WEB-Datenbank, die es HTML5-WEB-Anwendungen ermöglicht, Daten im Browser des Benutzers zu speichern. IndexedDB ist sehr leistungsstark und nützlich für Anwendungen. Es kann große Datenmengen in Chrome, IE, Firefox und anderen WEB-Browsern speichern. Hier finden Sie eine kurze Einführung in die Grundkonzepte von IndexedDB.
Was ist IndexedDB?
IndexedDB, der neue Datenspeicher von HTML5, kann Daten auf dem Client speichern und verwalten, wodurch Anwendungen schneller geladen werden und besser reagieren. Sie unterscheidet sich von einer relationalen Datenbank dadurch, dass sie über Datentabellen und Datensätze verfügt. Es beeinflusst die Art und Weise, wie wir Anwendungen entwerfen und erstellen. IndexedDB erstellt Objekte mit Datentypen und einfachen persistenten JavaScript-Objekten. Jedes Objekt kann einen Index haben, wodurch die gesamte Sammlung effizient abgefragt und durchlaufen werden kann. In diesem Artikel finden Sie ein reales Beispiel für die Verwendung von IndexedDB in einer Webanwendung.
Start
Wir müssen vor der Ausführung den folgenden Vorcode einfügen
Bevor wir die Datenbank erstellen, müssen wir zunächst Daten für die Datenbank erstellen:
如上所示,我们已经打开了名为"databaseName",指定版本号的数据库,open()方法有两个参数:
1.第一个参数是数据库名称, 它会检测名称为„databaseName“的数据库是否已经存在, 如果存在则打开它, 否则创建新的数据库.
2.第二个参数是数据库的版本,用于用户更新数据库结构.
onSuccess 处理赋值给db变量保存请求的结果供以后使用.
onerror的处理程序
发生错误事件时“onerror“被触发,如果打开数据库的过程中失败.
Onupgradeneeded处理程序
如果你想更更新数据库(创建,删除或修改数据库),那么你必须实现onupgradeneeded处理程序,使您可以在数据库中做任何更改. 在„onupgradeneeded“处理程序中是可以改变数据库的结构的唯一地方.
创建和添加数据到表:
IndexedDB使用对象存储来存储数据,而不是通过表。 每当一个值存储在对象存储中,它与一个键相关联. 它允许我们创建的任何索引允许我们访问存储在对象存储中的值储并插入预先准备好的数据:
Wir erstellen einen Objektspeicher mit der Methode createObjectStore(). Diese Methode akzeptiert zwei Parameter: - den gespeicherten Namen und das Parameterobjekt. Hier haben wir einen Objektspeicher namens „users“ und definieren den keyPath, das Attribut, das das Objekt einzigartig macht. Hier verwenden wir „id“ als keyPath, dieser Wert ist im Objektspeicher eindeutig und wir müssen sicherstellen, dass das Attribut dieser „ID“ in jedem Objekt im Objektspeicher vorhanden ist. Sobald der Objektspeicher erstellt ist, können wir mit dem Hinzufügen von Daten mithilfe einer for-Schleife beginnen.
Daten manuell zur Tabelle hinzufügen:
Wir können der Datenbank manuell zusätzliche Daten hinzufügen.
Daten aus einer Tabelle lesen
Die Methode get() wird verwendet, um Daten aus dem Objektspeicher abzurufen. Wir haben zuvor die ID des Objekts als keyPath festgelegt, sodass die Methode get() ein Objekt mit demselben ID-Wert findet. Der folgende Code gibt ein Objekt mit dem Namen „Bidulata“ zurück:
从表中读取所有数据
下面的方法检索表中的所有数据。 这里我们使用游标来检索对象存储中的所有数据:
该openCursor()用于遍历数据库中的多个记录。 在continue()函数中继续读取下一条记录。
删除表中的记录
下面的方法从对象中删除记录.
Endgültiger Code
Die folgende Methode löscht einen Datensatz aus der Objektquelle:
锁
localStorage是不带lock功能的.那就需要使用其它本储存方式,比如indexedDB.indedDB使用的是事务处理的机制,那实际上就是lock功能。
做这个测试需要先简单的封装下indexedDB的操作, 因为indexedDB的连接比较麻烦,而且两个测试页面都需要用到
Remplacez localStorage par le traitement des transactions indexedDB. Mais le résultat est différent
Pendant le test, il se peut qu'il n'y ait pas de sortie immédiate dans b.html car indexedDB est occupé à traiter les éléments a.html et la transaction b.html est en attente dans la file d'attente des transactions. Quoi qu’il en soit, le résultat de sortie ne sera pas la valeur 1. Parce que la plus petite unité de traitement d'indexedDB est une transaction, pas une expression comme localStorage. De cette façon, il vous suffit de mettre dans une transaction les éléments qui doivent être traités entre le verrouillage et le déverrouillage. De plus, la prise en charge par le navigateur d'indexedDB n'est pas aussi bonne que celle de localStorage, la compatibilité du navigateur doit donc être prise en compte lors de son utilisation.