indexDBInstance.html文件内容如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"></meta> <script> var db; var arrayKey=[] var openRequest; var lastCursor; var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB; function init() { //打开数据库 openRequest = indexedDB.open("messageIndexDB"); //只能在onupgradeneeded创建对象存储空间 openRequest.onupgradeneeded = function(e) { console.log("running onupgradeneeded"); var thisDb = e.target.result; if(!thisDb.objectStoreNames.contains("messageIndexDB")) { console.log("I need to create the objectstore"); /* *创建对象存储空间,第一个参数必须和打开数据库的第一个参数一致 *设置键名是id,并且可以自增. *autoIncrement默认是false,keyPath默认null */ var objectStore = thisDb.createObjectStore("messageIndexDB", { keyPath: "id", autoIncrement:true }); /* *创建索引 *第一个参数是索引名,第二个是属性名,第三个设置索引特性 */ objectStore.createIndex("name", "name", { unique: false }); } } openRequest.onsuccess = function(e) { //e.target.result返回一个数据库实例 db = e.target.result; db.onerror = function(event) { alert("数据库错误: " + event.target.errorCode); console.dir(event.target); }; if(db.objectStoreNames.contains("messageIndexDB")) { console.log("contains messageIndexDB"); //读写方式开启事务 var transaction = db.transaction(["messageIndexDB"],"readwrite"); transaction.oncomplete = function(event) { // console.log("All done!"); }; transaction.onerror = function(event) { // 错误处理 console.dir(event); }; //var content= document.querySelector("#content"); //得到messageIndexDB的objectStore对象 var objectStore = transaction.objectStore("messageIndexDB"); //游标查询 objectStore.openCursor().onsuccess = function(event) { //event.target.result获取存储空间的下一个对象 var cursor = event.target.result; var flag=0; //判断是否存在下一个对象,不存在是curson为null if (cursor) { console.log(cursor.key); //获取键 console.dir(cursor.value); //实际对象,一个Object实例 var msgList= document.querySelector("#messageList"); var msgDiv=document.createElement("div"); var msgTxt = document.createTextNode(cursor.value[flag]["name"]+"说:"+cursor.value[flag]["content"]); msgDiv.id=cursor.key; msgDiv.appendChild(msgTxt); msgList.appendChild(msgDiv); arrayKey.push(cursor.key); flag++; lastCursor=cursor.key; cursor.continue(); //将游标下移一项 } else { console.log("Done with cursor"); } }; //错误处理 objectStore.openCursor().onerror=function(event){ console.dir(event); }; } }; openRequest.onerror = function (event) { // 对request.error做一些需要的处理! console.log("your web may not support IndexedDB,please check."); }; //焦点处理 document.querySelector("#message").addEventListener("focus",function() { this.value = ""; }); document.querySelector("#name").addEventListener("focus",function() { this.value = ""; }); //添加数据 document.querySelector("#btn1").addEventListener("click", function() { var content=document.querySelector("#message").value; var name=document.querySelector("#name").value; /*var address=document.querySelector("#address").value;*/ var messageIndexDB=[{"name":name,"content":content}]; var transaction = db.transaction(["messageIndexDB"], "readwrite"); transaction.oncomplete = function(event) { // console.log("transaction complete"); }; transaction.onerror = function(event) { console.dir(event); }; //得到messageIndexDB的objectStore对象 var objectStore = transaction.objectStore("messageIndexDB"); objectStore.add(messageIndexDB); objectStore.openCursor().onsuccess = function(event) { cursor = event.target.result; var key; if(lastCursor==null) { key=cursor.key; lastCursor=key; } else { key=++lastCursor; } var msgList= document.querySelector("#messageList"); var msgDiv=document.createElement("div"); msgDiv.id=key; var msgTxt = document.createTextNode(name+"说:"+content); msgDiv.appendChild(msgTxt); msgList.appendChild(msgDiv); arrayKey.push(key); console.log("success add new record!key:"+key); console.dir(messageIndexDB); } }); //删除 document.querySelector("#delete").addEventListener("click", function() { if(arrayKey.length==0){ console.log("no data to delete!"); } else { var transaction = db.transaction(["messageIndexDB"], "readwrite"); transaction.oncomplete = function(event) { // console.log("transaction complete!"); }; transaction.onerror = function(event) { console.dir(event); }; //得到messageIndexDB的objectStore对象 var objectStore = transaction.objectStore("messageIndexDB"); var removeKey=arrayKey.shift(); //获取key var getRequest=objectStore.get(removeKey); getRequest.onsuccess=function(e) { var result =getRequest.result; console.dir(result); } //删除key var request=objectStore.delete(removeKey); request.onsuccess = function(e) { console.log("success delete record!"); }; request.onerror = function(e) { console.log("Error delete record:", e); }; //隐藏要删除的元素 document.getElementById(removeKey).style.display="none"; } }); } window.addEventListener("DOMContentLoaded", init, false); </script> <STYLE TYPE="text/css" MEDIA=screen> <!-- body{ font-size: 20px; -webkit-text-size-adjust:none; } --> </STYLE> </head> <body> <h1>简单留言板(js+IndexedDB数据库实现)</h1> <form> 昵称:<input id="name" type="text" name="name"><br> 内容:<textarea id="message" rows="3" cols="20"></textarea><br> <input id="btn1" type="button" value="提交留言" /> <input id="delete" type="button" value="删除留言" /> </form> <br> <p1>留言列表</p1> <div id="messageList"></div> </body> </html>
运行效果:
点击一次“删除留言”,重新打开浏览器,数据仍然存在,如下所示:
PS:
1.要注意一点的是,在创建对象存储空间的时候,必须在openRequest.onupgradeneeded 中创建,否则出错;
2.由于IndexedDB不能实现共享,所以每个客户端打开时IndexedDB保存的数据不一致。
相关推荐
但是如果在浏览器上需要用到数据库一般会使用Indexed DB数据库,webSQL基本上已经废弃了,具体原因小伙伴可以下来自己查查。 IndexedDB 是一种底层 API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型...
这个通信录的实现就是利用IndexedDB进行数据管理和交互的一个实例。 首先,我们需要理解IndexedDB的基本概念。IndexedDB是一个键值对存储系统,其中每个键都对应一个值。值可以是任意JavaScript类型,包括对象。...
JavaScript文件中会包含实现IndexedDB操作的代码,你可以从中学习如何在实际项目中使用IndexedDB。 总的来说,了解和掌握IndexedDB对于开发现代Web应用至关重要,尤其是在需要离线存储和高性能数据检索的场景下。...
IndexedDB 基本使用
这篇博文将深入探讨IndexedDB的核心概念、用途以及如何在实际项目中运用。 IndexedDB是一种非关系型数据库,它允许在浏览器中存储大量结构化数据,并支持索引,从而可以高效地查询这些数据。与传统的Web存储如...
**前端存储之IndexedDB详解** 在现代Web应用中,数据存储变得越来越重要,尤其是在离线存储和大数据量处理方面。IndexedDB是浏览器提供的一种客户端存储解决方案,它允许开发者在用户的浏览器上存储大量的结构化...
"JavaScript开发-其它杂项" 的标签明确了这个话题属于JavaScript开发的范畴,特别是非主流或者不常见的部分,比如IndexedDB,它是HTML5的一个离线存储标准,不属于JavaScript的基本特性,因此被归类为“其它杂项”。...
IndexedDB 是一种在浏览器中存储大量结构化数据的低级 API,它提供了索引和查询功能,非常适合...这种封装使得 IndexedDB 更易于集成到 JavaScript 应用中,尤其是那些需要离线存储或高性能本地数据访问的 Web 应用。
Ract + IndexedDB,Todo应用 建立 npm install --global纱线 纱线-版本 yarn global添加create-react-app npx create-react-app app1 npm安装 npm install react-router-dom-保存 npm install axios-保存 npm ...
**JavaScript开发-IndexedDB键值存储** 在JavaScript开发中,数据存储是一个不可或缺的部分。Web应用程序经常需要在用户浏览器上持久化数据,以便在用户关闭和重新打开页面时保持数据。传统的浏览器存储方式如...
开发者可以通过JavaScript API与IndexedDB交互,创建、读取、更新和删除数据。Windows 8的API提供了一种一致的方式来管理数据,无论用户是在桌面还是平板设备上使用应用。 对于Android,IndexedDB同样被内置在...
前段时间项目需要本地存储聊天数据,使用到indexedDB,经查阅大量文章,终于完成。感觉网上indexedDB的文章不够多,也不够完善,因此把代码分享出来,帮助需要的小伙伴。
1. 安装npm包// use npmnpm install --save-dev indexeddb-promise// use yarnyarn add --dev indexeddb-promisescript引入IndexedDB 会被注册为一个全局变量。建议链接到一个可以手动更新的指定版本号:[removed]...
在实际应用中,IndexedDB常与Service Worker结合,实现离线存储和缓存策略。例如,当用户在线时,应用可以将数据同步到服务器,并在离线时使用IndexedDB提供服务。 以下是一个简单的IndexedDB操作示例: ```html ...
IndexedDB的设计目标是为了满足Web应用程序对大量数据管理的需求,比如离线应用、数据密集型Web应用等。 ### IndexedDB的基本概念 1. **数据库(Database)**:IndexedDB的核心是数据库,每个数据库都有一个唯一的...
javascript 是网页开发的基础,它负责处理动态内容,实现用户交互。在 Vue3.x 中,JavaScript 的新特性如 ES6+ 语法、Promise、async/await 等都可以充分利用,提升了代码的可读性和易维护性。 Vite 是由 Vue.js ...
在Backbone.js中,数据通常存储在内存中的集合中,但为了实现持久化存储,我们可以使用适配器来对接不同的数据存储系统,如localStorage或indexedDB。IndexedDB是浏览器提供的一个NoSQL数据库,它允许我们在客户端...
从IndexedDB导出并导入另一个IndexedDB的Javascript代码,以便导出所有“ Great Suspender”保存的会话,并将它们导入到另一个扩展的IndexedDB(如果兼容)中,或在先前版本的“ The Great Suspender”中导入 ...
Dexie.js是一个轻量级的JavaScript库,它为浏览器中的IndexedDB提供了一个易用且强大的API。IndexedDB是Web浏览器提供的一个原生的本地存储解决方案,允许应用程序在客户端存储大量数据。然而,由于其复杂的API,...
IndexedDB不直接支持实时数据同步,但可以结合其他技术(如Service Worker和WebSocket)实现离线优先的应用。 10. 应用场景: IndexedDB适合用于需要存储大量数据的Web应用,如离线阅读器、音乐播放器或待办事项...