HTML5 Web IndexedDB 数据库详解

简介: IndexedDB 是一种高效的浏览器存储方案,允许在本地存储大量结构化数据,支持索引和事务,适用于需要离线和大数据处理的应用。它由数据库、对象仓库等组成,通过键值对存储数据,确保数据一致性和完整性。本介绍展示了如何创建、读取、更新和删除数据,以及事务和错误处理的最佳实践。

IndexedDB 是一种浏览器存储解决方案,允许在用户的浏览器中存储大量结构化数据。它可以存储键值对,并支持索引和事务,适用于需要在客户端进行大量数据操作的应用,比如离线应用。

1. IndexedDB 的基本概念

  • 数据库:IndexedDB 数据库是一个包含对象仓库的集合。
  • 对象仓库:类似于关系数据库中的表,存储数据的集合。
  • :每个对象都有一个唯一的键(主键),用于标识数据。
  • 事务:操作的一组原子性操作,可以确保数据的一致性与完整性。

2. 创建和打开数据库

在使用 IndexedDB 之前,首先需要创建或打开一个数据库。

// 创建或打开数据库
const request = indexedDB.open('myDatabase', 1);

request.onupgradeneeded = function(event) {
   
    const db = event.target.result;
    // 创建一个对象仓库
    const objectStore = db.createObjectStore('myObjectStore', {
    keyPath: 'id' });
};

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

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

3. 增加数据

可以通过事务向对象仓库中添加数据。

function addData(db, 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:', event.target.result);
    };

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

// 使用示例
request.onsuccess = function(event) {
   
    const db = event.target.result;
    addData(db, {
    id: 1, name: 'John Doe' });
};

4. 读取数据

可以通过事务读取对象仓库中的数据。

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

    request.onsuccess = function(event) {
   
        console.log('Data read:', event.target.result);
    };

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

// 使用示例
request.onsuccess = function(event) {
   
    const db = event.target.result;
    readData(db, 1);
};

5. 更新数据

可以通过事务更新对象仓库中的数据。

function updateData(db, data) {
   
    const transaction = db.transaction(['myObjectStore'], 'readwrite');
    const objectStore = transaction.objectStore('myObjectStore');
    const request = objectStore.put(data); // put用于添加或更新

    request.onsuccess = function(event) {
   
        console.log('Data updated:', event.target.result);
    };

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

// 使用示例
request.onsuccess = function(event) {
   
    const db = event.target.result;
    updateData(db, {
    id: 1, name: 'Jane Doe' });
};

6. 删除数据

可以通过事务删除对象仓库中的数据。

function deleteData(db, 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:', event.target.result);
    };

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

// 使用示例
request.onsuccess = function(event) {
   
    const db = event.target.result;
    deleteData(db, 1);
};

7. 事务处理和错误处理

在进行数据库操作时,务必处理错误和进行适当的事务管理。在上述示例中,每个操作都进行了错误处理,以确保操作的安全性。

8. 总结

IndexedDB 提供了一种强大的方式来存储和管理客户端数据,尤其适合需要离线支持和大数据存储的应用。在使用时,需要仔细处理版本变化和事务管理,以确保数据的完整性和一致性。

相关文章
|
12月前
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
374 19
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
345 6
|
前端开发 JavaScript UED
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势,包括样式表优化、DOM操作减少、图像优化等技术,并分析了电商网站的具体案例,强调了技术演进对Web性能的深远影响。
221 5
|
SQL 安全 网络安全
Web应用防火墙(WAF)与数据库应用防火墙有什么区别?
Web应用防火墙(WAF)专注于Web应用系统和网站的应用层防护,可有效应对OWASP Top 10等常见攻击,防止SQL注入、CC攻击等。而数据库应用防火墙则位于应用服务器与数据库之间,提供数据库访问控制、攻击阻断、虚拟补丁等高级防护功能,直接保护数据库免受攻击。两者分别针对Web层和数据库层提供不同的安全保护。
335 4
|
存储 移动开发 数据库
HTML5 Web IndexedDB 数据库常用数据存储类型
IndexedDB 支持多种数据存储类型,满足复杂数据结构的存储需求。它包括基本数据类型(如 Number、String、Boolean、Date)、对象(简单和嵌套对象)、数组、Blob(用于二进制数据如图像和视频)、ArrayBuffer 和 Typed Arrays(处理二进制数据)、结构化克隆(支持 Map 和 Set 等复杂对象),以及 JSON 数据。尽管不直接支持非序列化数据(如函数和 DOM 节点),但可以通过转换实现存储。开发者应根据具体需求选择合适的数据类型,以优化性能和使用体验。
|
移动开发 JavaScript 前端开发
HTML5 Web Workers详解
HTML5 Web Workers 允许在后台线程中运行 JavaScript,实现复杂计算而不影响用户界面,提升应用性能。其主要特性包括并行处理、异步通信、独立作用域及多数据类型支持。通过创建和使用 Worker 文件,如 `worker.js`,可执行后台任务,并与主线程通过消息传递机制通信。适用于数据处理、图像处理、复杂计算及网络请求并行等场景。需要注意的是,Web Workers 在浏览器兼容性、安全性限制、调试及资源消耗方面需特别关注。合理利用 Web Workers 可显著增强 Web 应用的流畅度和响应速度。
|
移动开发 前端开发 JavaScript
HTML与现代Web开发的不同技术
【10月更文挑战第11天】HTML与现代Web开发的不同技术
302 0
|
XML 移动开发 数据格式
|
8月前
|
移动开发 前端开发 JavaScript
征信报告修改器,征信报告生成器,制作软件无痕修改软件【js+html+css】
本项目为信用评分模拟器教学工具,采用HTML5实现,仅供学习参考。核心功能通过JavaScript构建,包含虚拟数据生成、权重分配及信用因素分析(如还款记录、信用使用率等)。