首页 > 其他分享 >js 如何操作IndexedDB 存储

js 如何操作IndexedDB 存储

时间:2024-12-05 22:35:35浏览次数:4  
标签:IndexedDB function 存储 transaction const objectStore request js event

IndexedDB 是一种在用户浏览器中存储大量结构化数据的方式。它是一个低级 API,用于在客户端存储大量数据,并使用索引来进行高性能搜索。以下是如何在前端 JavaScript 中使用 IndexedDB 的基本步骤:

1. 打开数据库

首先,你需要打开一个数据库。如果数据库不存在,它会自动创建。

let db;
const request = indexedDB.open('myDatabase', 1);

request.onerror = function(event) {
  console.error('Database error:', event.target.errorCode);
};

request.onsuccess = function(event) {
  db = event.target.result;
  console.log('Database opened successfully');
};

request.onupgradeneeded = function(event) {
  db = event.target.result;
  const objectStore = db.createObjectStore('myObjectStore', { keyPath: 'id' });
  objectStore.createIndex('name', 'name', { unique: false });
  objectStore.createIndex('email', 'email', { unique: true });
};

2. 添加数据

你可以使用 transactionobjectStore 来添加数据。

function addData(data) {
  const transaction = db.transaction(['myObjectStore'], 'readwrite');
  const objectStore = transaction.objectStore('myObjectStore');
  const request = objectStore.add(data);

  request.onsuccess = function(event) {
    console.log('Data added successfully');
  };

  request.onerror = function(event) {
    console.error('Unable to add data', event.target.errorCode);
  };
}

// 示例数据
const newData = { id: 1, name: 'John Doe', email: 'john@example.com' };
addData(newData);

3. 读取数据

你可以通过键值来读取数据。

function readData(id) {
  const transaction = db.transaction(['myObjectStore']);
  const objectStore = transaction.objectStore('myObjectStore');
  const request = objectStore.get(id);

  request.onerror = function(event) {
    console.error('Unable to retrieve data', event.target.errorCode);
  };

  request.onsuccess = function(event) {
    if (request.result) {
      console.log('Data retrieved successfully', request.result);
    } else {
      console.log('Data not found');
    }
  };
}

// 读取数据
readData(1);

4. 更新数据

你可以通过键值来更新数据。

function updateData(data) {
  const transaction = db.transaction(['myObjectStore'], 'readwrite');
  const objectStore = transaction.objectStore('myObjectStore');
  const request = objectStore.put(data);

  request.onsuccess = function(event) {
    console.log('Data updated successfully');
  };

  request.onerror = function(event) {
    console.error('Unable to update data', event.target.errorCode);
  };
}

// 更新数据
const updatedData = { id: 1, name: 'Jane Doe', email: 'jane@example.com' };
updateData(updatedData);

5. 删除数据

你可以通过键值来删除数据。

function deleteData(id) {
  const transaction = db.transaction(['myObjectStore'], 'readwrite');
  const objectStore = transaction.objectStore('myObjectStore');
  const request = objectStore.delete(id);

  request.onsuccess = function(event) {
    console.log('Data deleted successfully');
  };

  request.onerror = function(event) {
    console.error('Unable to delete data', event.target.errorCode);
  };
}

// 删除数据
deleteData(1);

注意事项

  • 事务:IndexedDB 操作需要在事务中进行。你可以指定事务的模式为 readonlyreadwriteversionchange
  • 异步操作:IndexedDB 的所有操作都是异步的,使用回调函数或 Promise 来处理操作结果。
  • 错误处理:确保对所有可能发生的错误进行处理,例如数据库打开失败、数据添加失败等。

通过上述步骤,你可以在前端 JavaScript 中使用 IndexedDB 来存储和操作大量数据。IndexedDB 是一个强大的客户端存储解决方案,适用于需要存储大量数据并在客户端进行高效查询的应用场景。

标签:IndexedDB,function,存储,transaction,const,objectStore,request,js,event
From: https://www.cnblogs.com/jocongmin/p/18589560

相关文章

  • 一个js文件导出一个new class实例,其他多个地方import引用的是同一个实例对象吗
    在JavaScript中,当你从一个模块导出一个类的实例时,其他模块在导入这个实例时将获得该实例的一个引用。这意味着,如果你修改了这个实例的属性或调用它的方法,所有导入该实例的模块都会看到这些更改,因为它们引用的是同一个对象。以下是一个示例:moduleA.js:classMyClass{const......
  • 电商项目--分布式文件存储FastDFS简介
    对于大型互联网类型项目,其内部存在非常多的文件,会存在图片文档报表等文件。采用传统方式存储在机器磁盘上,其容量无法支撑这些文件,需要考虑分布式文件系统。一、FastDFS简介FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同......
  • etcd分布式存储系统快速入门指南
    在分布式系统的复杂世界中,确保有效的数据管理至关重要。分布式可靠的键值存储在维护跨分布式环境的数据一致性和可伸缩性方面起着关键作用。在这个全面的教程中,我们将深入研究etcd,这是一个开源的分布式键值存储。我们将探索其基本概念、特性和用例,并提供一个动手快速入......
  • java操作http请求针对不同提交方式(application/json和application/x-www-form-urlenc
    @目录摘要举例三种请求:依赖第一种:http的GET请求(application/json)第二种:http的POST请求(application/json)第三种:http的POST请求(application/x-www-form-urlencoded)摘要举例三种请求:http的GET请求(application/json)http的POST请求(application/json)http的POST请求(application/x......
  • linux系统修改数据存储目录导致mysql服务无法启动的问题
    在Linux系统上,安装好并启动mysql后,如果需要移动数据目录(通常是需要将数据目录移动到数据盘挂载点目录下),通常是一下几个步骤:1:停止mysql服务servicemysqlstop2:复制原数据目录到目标新目录cp-rp/var/lib/mysql/data/my_new_data_folder【-rp表示携带原有文件的权限属性到新......
  • js前端搜索组件flexsearch使用
    说明文档往往有搜索框,可以根据关键字检索文档内容。我有时疑惑这种检索是后端DB检索还是其它的呢?拿bootstrap-table的说明文档看下:是由algolia提供的检索服务api那普通的内容页面有没有可能实现前端检索呢?查资料,找到了flexsearch这个js检索组件,试用下:说明及常用方法有三种类......
  • 纯js可定制的跨浏览器日期时间选择器插件
    Rome是一款纯js可定制的跨浏览器日期时间选择器插件。该日期时间选择器不依赖于jquery,但它依赖于moments.js。可以通过CSS文件来自定义该日期时间选择器的外观样式。在线预览 下载  安装可以通过Bower或nmp来安装该日期时间选择器插件。npminstall--saveromebower......
  • 使用printJs实现打印效果
    一、需求需要实现部分页面的内容打印;页面内容为表单,表单中还包括了表格。使用了 a-form、a-row、a-table 相关组件二、实现方法1、安装print-js npminstall--saveprint-js 2、给需要打印的部分设置一个id例如:我需要打印的是一整个表单内容,就再form表单上面设置id(此i......
  • 【WEB开发.js】HTTP请求和相应报文的头字段:Content-Type (巨巨巨巨详细好懂的举例详解)
    Content-Type是HTTP请求和响应报文中的头字段之一,用于指定发送的数据类型(MIME类型)。它告诉服务器或客户端数据的格式,方便接收方正确解析和处理内容。例如,在发送JSON数据时,会指定Content-Type:application/json;而发送HTML页面时,则会指定Content-Type:text/html。......
  • 求助——AssertionError: Attribute pipeline is missing from configuration.json.
    我在本地运行Sunsimiao大模型的时候遇到了“AssertionError:Attributepipelineismissingfromconfiguration.json.”的问题。在网上找了很多问题都没有解决,求助一下广大网友。有什么好的解决方法吗?本地环境如上所示,不知是哪里出现了问题!!!!......