- IndexedDB Tutorial
- IndexedDB - Home
- IndexedDB - Introduction
- IndexedDB - Installation
- IndexedDB - Connection
- IndexedDB - Object Stores
- IndexedDB - Creating Data
- IndexedDB - Reading Data
- IndexedDB - Updating Data
- IndexedDB - Deleting Data
- Using getAll() Functions
- IndexedDB - Indexes
- IndexedDB - Ranges
- IndexedDB - Transactions
- IndexedDB - Error Handling
- IndexedDB - Searching
- IndexedDB - Cursors
- IndexedDB - Promise Wrapper
- IndexedDB - Ecmascript Binding
- IndexedDB Useful Resources
- IndexedDB - Quick Guide
- IndexedDB - Useful Resources
- IndexedDB - Discussion
IndexedDB - 对象存储
对象存储是IndexedDB的数据存储。这是存储数据的地方。一个数据库可能有多个对象存储。将它们视为 RDBMS 中的表,我们根据要存储的数据类型来存储数据。
为了确保数据库完整性,只能使用回调函数idb.open()创建和删除对象存储。它包含一个名为createObjectStore()的方法,用于创建对象存储。
创建对象存储
您可以使用createObjectStore()方法创建对象存储。以下是该方法的语法 -
IDBDatabase.createObjectStore(name); Or, IDBDatabase.createObjectStore(name, options);
在哪里,
- 名称是对象存储的名称。
- options对象可以让我们定义各种配置属性。
例子
以下示例创建一个新数据库并在其中创建一个对象存储 -
<!DOCTYPE html> <html lang="en"> <head> <title>Creating Object Store</title> </head> <body> <script> var request = indexedDB.open("myDatabase", 2); request.onupgradeneeded = event => { var db = event.target.result; var objectStore = db.createObjectStore("customers"); document.write("Object store Created Successfully..."); }; </script> </body> </html>
输出
执行时,上述程序在浏览器上显示以下消息。
Object store Created Successfully...
确认
如果上面的程序执行成功,如果您展开“myDatabase”,您可以看到新创建的对象存储。
定义主键
与 RDBMS 类似,我们需要主键来唯一定义对象存储中的某些数据。可以使用密钥路径或密钥生成器通过两种方式完成。
密钥路径和密钥生成器
键路径是始终存在并包含唯一值的属性。我们可以选择一个唯一的值,例如电子邮件地址。
键生成器为添加到对象存储中的每个对象创建唯一值。默认情况下,如果我们不提及密钥生成器就会出现。例如,自动增量。
句法
以下是在对象存储上创建键路径的语法。
var objectStore = db.createObjectStore("ObjectStoreName", { keyPath: "primary key, autoincrement/autoDecrement : true" });
例子
在下面给出的示例中,我们使用 JavaScript 创建对象存储的键路径 -
<!DOCTYPE html> <html lang="en"> <head> <title>keypath</title> </head> <body> <script> var request = indexedDB.open("myDtabase", 2); request.onupgradeneeded = event => { var db = event.target.result; var objectStore = db.createObjectStore("customers",{keyPath:"id", autoIncrement:true}); document.write("Object store Created Successfully..."); }; </script> </body> </html>
输出
执行上面的示例时,它将在浏览器上显示以下文本 -
Object store Created Successfully...
确认
如果上面的程序执行成功,如果你展开“myDatabase”你可以看到新创建的对象存储,如果你点击它你可以观察到为“id”创建了keypath 。
当创建新的对象存储时,它们会在 IndexedDB 文件夹中提及,如上所示。
您可以同时使用密钥路径和密钥生成器。如果数据始终是唯一的,我们可以使用键路径,否则如果值发生变化,您可以使用键生成器,如果您想更改每个值的值,但想要给出唯一代表存储的值,我们可以使用两者。
定义索引
索引是一种对象存储。它们用于从引用对象中检索由指定属性存储的数据。索引使用指定的属性作为其键路径,而不是引用存储的主键。
要创建索引,您需要在对象存储实例上调用createIndex()方法。
句法
以下是createIndex()方法的语法-
var myIDBIndex = objectStore.createIndex(indexName, keyPath); var myIDBIndex = objectStore.createIndex(indexName, keyPath, Parameters);
在哪里,
indexName是创建的索引的名称。
Keypath是创建对象存储时的主要定义
最后一个参数的值可以是唯一的,也可以是多次的
如果你“传递 unique: true”。索引不允许单个键出现重复值。
如果你通过“multi-entry: true”。当 keyPath 解析为数组时,索引将为每个数组元素添加一个条目。如果为 false,它将添加一个包含数组的单个条目。
例子
以下 JavaScript 示例演示了如何创建索引。
<!DOCTYPE html> <html lang="en"> <head> <title>OPENING A DATABASE</title> </head> <body> <script> const dbName = "myDB"; const studentdata = [ {name : "jason" , rollno: "160218737028" , branch : "IT"}, {name : "lokesh" , rollno: "160218735020" , branch : "CSE"}, {name : "tarun" , rollno: "160218733057" , branch : "EEE"}, {name : "pranith" , rollno: "160218737029" , branch : "IT"} ]; var request = indexedDB.open("myDB", 2); request.onupgradeneeded = event => { var db = event.target.result; var objectStore = db.createObjectStore("student",{ keyPath :"rollno" }); objectStore.createIndex("name", "name", { unique: false }); objectStore.createIndex("branch", "branch", { unique: false }); objectStore.transaction.oncomplete = event => { var objectStore = db.transaction("student", "readwrite").objectStore("student"); studentdata.forEach(function(student) { objectStore.add(student); }); }; }; </script> </body> </html>
输出
如果您去验证 IndexedDB 数据库myDB的内容并展开它,您可以将创建的表观察为 -
如果单击姓名和学生值,您可以观察索引值:
名称索引
# | 密钥(密钥路径:“名称”) | 主键(键路径:“rollno”) | 价值 |
---|---|---|---|
0 | “杰森” | “160218737028” | {名称:'杰森',rollno:'160218737028',分支: 1. 分支:“IT” 2.姓名:“杰森” 3. 卷号: "160218737028" |
1 | “洛克什” | “160218735020” | {名称:'lokesh',rollno:'160218735020',分支:'CSE'} 1. 分支:“CSE” 2.名称:“洛克什” 3. 卷号: "160218735020" |
2 | “普拉尼思” | “160218737029” | {名称:'pranith',rollno:'160218737029',分支:'IT'} 1. 分支:“IT” 2.名称:“普拉尼思” 3. 卷号: "160218737029" |
3 | “塔伦” | “160218733057” | {名称:'tarun',rollno:'160218733057',分支:'EEE'} 1. 分支:“EEE” 2.名称:“塔伦” 3. 卷号: "160218733057" |
分行索引
# | 键(键路径:“分支”) | 主键(键路径:“rollno”) | 价值 |
---|---|---|---|
0 | “CSE” | “160218735020” | {名称:'lokesh',rollno:'160218735020',分支:'CSE'} 1. 分支:“CSE” 2.名称:“洛克什” 3. 卷号: "160218735020" |
1 | “EEE” | “160218733057” | {名称:'tarun',rollno:'160218733057',分支:'EEE'} 1. 分支:“EEE” 2.名称:“塔伦” 3. 卷号: "160218733057" |
2 | “它” | “160218737028” | {名称:'杰森',rollno:'160218737028',分支:'IT'} 1. 分支:“IT” 2.姓名:“杰森” 3. 卷号: "160218737028" |
3 | “它” | “160218737029” | {名称:'pranith',rollno:'160218737029',分支:'IT'} 1. 分支:“IT” 2.名称:“普拉尼思” 3. 卷号: "160218737029" |
删除对象存储
对象存储类似于数据库中的表,当不需要表时我们将其删除。同样,如果不再使用对象存储,您可以将其删除。要删除对象存储,您需要调用deleteObjectStore()函数。
句法
以下是deleteObjectStore()函数的语法-
db.deleteObjectStore("store_name");
其中,store_name 是您需要删除的对象存储的名称。
例子
让我们看一个 JavaScript 示例,该示例删除不再需要的对象存储 -
<!DOCTYPE html> <html lang="en"> <head> <title>OPENING A DATABASE</title> </head> <body> <script> const dbName = "Database"; var request = indexedDB.open("Database", 2); request.onupgradeneeded = event => { var db = event.target.result; var objectStore = db.createObjectStore("student",{ keyPath :"rollno" } ); var objstore = db.createObjectStore("college",{autoIncrement : true}); db.deleteObjectStore("college"); }; </script> </body> </html>
输出
在浏览器中删除 IndexedDB 文件夹中的对象存储之前和之后。
Database College − object store Student − object store Name − index Branch − index Database Student − object store Name − index Branch − index