html5 初试 indexedDB
indexedDB是存储大量结构化数据的API,demo中用到的是异步API,麻烦的就是所有对indexedDB的操作都会发生一个异步的‘请求’,只要熟悉了API操作起来也很简单。
大体流程是这样
1.打开数据库
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; if ('webkitIndexedDB' in window) { window.IDBTransaction = window.webkitIDBTransaction; window.IDBKeyRange = window.webkitIDBKeyRange;}//这个就不解释了 var request = indexedDB.open("adsageIDB"); //open : indexedDB只有这一个方法 打开(数据库名)request.onsuccess = function(e) { //异步 var v = "1.00";var db = e.target.result; if (v!= db.version) {var setVrequest = db.setVersion(v); setVrequest.onsuccess = function(e) { //异步 if(db.objectStoreNames.contains("todo")) { db.deleteObjectStore("todo"); }var store = db.createObjectStore("todo", {keyPath: "adsid"});//onsuccess 后创建ObjectStore 暂时用到两个参数,数据库&&主键 } } }
这样就 创建/连接 了一个数据库
2.创建交互对象 && 监听dom事件 && 处理数据
然后就是要操作数据库了
//插入数据 暂时只插入一列 var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE);//创建transaction var store = trans.objectStore("todo");//创建Store//要操作数据必须建立transaction 和 Store var data = { "text": todoText, "adsid": new Date().getTime()};//一个小数据 adsid是主键 var request = store.put(data); //‘强行’插入 request.onsuccess = function(e) {//成功后执行一些操作}; request.onerror = function(e) { console.log("Error Adding: ", e);};
//读取数据var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE);var store = trans.objectStore("todo"); var keyRange = IDBKeyRange.lowerBound(0);var cursorRequest = store.openCursor(keyRange);//这里用到指针cursor ,openCursor的参数 keyRange是遍历范围 还可以添加遍历方向参数//另一种方法是get() 这个就比较简单了直接store.get('键值')就行 cursorRequest.onsuccess = function(e) {var result = e.target.result;if(!!result == false)return; console.log(result.value); result.continue(); //循环读取所有数据};
//删除数据...store.delete('键值') ...
出了一个小demo
<!DOCTYPE html><html> <head> <script>var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; if ('webkitIndexedDB' in window) { window.IDBTransaction = window.webkitIDBTransaction; window.IDBKeyRange = window.webkitIDBKeyRange; } adsageIDB = {}; adsageIDB.db = null; adsageIDB.onerror = function(e) { console.log(e); }; adsageIDB.open = function() {var request = indexedDB.open("adsageIDB"); request.onsuccess = function(e) {var v = "1.00"; adsageIDB.db = e.target.result;var db = adsageIDB.db; if (v!= db.version) {var setVrequest = db.setVersion(v); setVrequest.onerror = adsageIDB.onerror; setVrequest.onsuccess = function(e) {if(db.objectStoreNames.contains("todo")) { db.deleteObjectStore("todo"); } var store = db.createObjectStore("todo", {keyPath: "adsid"}); adsageIDB.getAllTodoItems(); }; }else { adsageIDB.getAllTodoItems(); } }; request.onerror = adsageIDB.onerror; } adsageIDB.addTodo = function(todoText) {var db = adsageIDB.db;var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE);var store = trans.objectStore("todo"); var data = { "text": todoText, "adsid": new Date().getTime() }; var request = store.put(data); request.onsuccess = function(e) { adsageIDB.getAllTodoItems(); }; request.onerror = function(e) { console.log("Error Adding: ", e); }; }; adsageIDB.deleteTodo = function(id) {var db = adsageIDB.db;var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE);var store = trans.objectStore("todo"); var request = store.delete(id); request.onsuccess = function(e) { adsageIDB.getAllTodoItems(); }; request.onerror = function(e) { console.log("Error Adding: ", e); }; }; adsageIDB.getAllTodoItems = function() {var todos = document.getElementById("todoItems"); todos.innerHTML = ""; var db = adsageIDB.db;var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE);var store = trans.objectStore("todo"); var keyRange = IDBKeyRange.lowerBound(0);var cursorRequest = store.openCursor(keyRange); cursorRequest.onsuccess = function(e) {var result = e.target.result;if(!!result == false)return; renderTodo(result.value); result.continue(); }; cursorRequest.onerror = adsageIDB.onerror; }; function renderTodo(row) {var todos = document.getElementById("todoItems");var li = document.createElement("li");var a = document.createElement("a");var t = document.createTextNode(row.text); a.addEventListener("click", function() { adsageIDB.deleteTodo(row.adsid); }, false); a.textContent = " [删除]"; li.appendChild(t); li.appendChild(a); todos.appendChild(li) } function addTodo() {var todo = document.getElementById("todo"); adsageIDB.addTodo(todo.value); todo.value = ""; } function init() { adsageIDB.open(); } window.addEventListener("DOMContentLoaded", init, false); </script> </head> <body> <ul id="todoItems"></ul> <input type="text" id="todo" name="todo" placeholder="adsageIDB text?" /> <input type="submit" value="增加一个 IDB" οnclick="addTodo(); return false;"/> </body></html>
see also Migrating your WebSQL DB to IndexedDB
转载于:https://www.cnblogs.com/haner/archive/2012/02/03/2337060.html
html5 初试 indexedDB相关推荐
- html5 indexeddb 排序,html5 – 在IndexedDB中,有没有办法进行排序复合查询?
本回答中使用的术语"复合查询"是指在其WHERE子句中涉及多个条件的SQL SELECT语句.虽然indexedDB规范中没有提到这样的查询,但您可以通过创建一个包含一组属性名称的 ...
- html5indexeddb排序,html5的indexedDB数据库操作实例
效果: 代码: StringUtil.js //去除字符串中间空格 String.prototype.Trim = function() { return this.replace(/(^s*)|(s ...
- HTML5的IndexedDB数据库
- 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(1月16日-2月5日)
分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(1月16日-2月5日) 本周Silverlight学习资源更新 WIn2003部署Silverlight coo ...
- 什么是React为什么使用React什么时候使用React
什么是React? (What is React?) React.js often referred to as React or ReactJS is a JavaScript library re ...
- tp5 自动加上html,【TP5.1】HTML标签自动转义,导致CKEditor保存内容无法正常显示!...
问题:使用Thinkphp5.1 开发的时候显示CKEditor保存的内容不符合预期. 希望的样子,肯定是不显示 等标签,而是下面的样子. 因为刚开始使用TP5.1和CKEditor,所以遇到问题有点 ...
- 【电脑运用及修理】Mozilla Firefox 浏览器
Firefox 浏览器 Firefox 浏览器,中文名"火狐浏览器",是来自 Mozilla 的一款免费的开源 web 浏览器. Firefox 发布于 2004 年,也是当今最流 ...
- HTML5本地存储IndexedDB基础使用
做项目时需要用H5本地存储,感觉还不错 下面是一些基础知识和一个完整的实例 HTML5 的一个重要特性是本地数据持久性,它使用户能够在线和离线访问 Web 应用程序.此外,本地数据持久性使移动应用程序 ...
- HTML5 进阶系列:indexedDB 数据库
前言 在 HTML5 的本地存储中,有一种叫 indexedDB 的数据库,该数据库是一种存储在客户端本地的 NoSQL 数据库,它可以存储大量的数据.从上篇:HTML5 进阶系列:web Stora ...
最新文章
- Android优化五:布局优化
- 关于ios phone APP生命周期的一点理解
- Android零基础入门第24节:自定义View简单使用
- delete mysql 大表_无语了,直到今天,我才揪出MySQL磁盘消耗迅猛的“真凶”!
- unity全栈开发是什么意思_unity游戏公司面试问题总结
- Python List:一文彻底粉碎列表
- 2016CCPC网选 1002:Zhu and 772002(求解矩阵秩)
- 【转】基于Ubuntu 14.04 LTS编译Android4.4.2源代码
- mysql如何对字段加密_MySQL对指定字段进行加密(双向加密)
- 扩计算机内存,如何增加计算机内存,三种方法来扩展计算机内存
- 使用JLINK仿真器调试树莓派4
- 金蝶苍穹,报表查询插件
- 利用马尔可夫模型分析游戏装备强化概率问题
- 乘法原理的例题和答案_加法原理与乘法原理练习题
- Android 平台最新资讯(《Google android 入门开发与实战》pdf完整下载)
- 微积分 | 函数连续与间断点
- Redis 自定义对象 cannot be cast to java.lang.String
- 电视缓存框架videocache
- 腾讯时尚网页精彩专题设计欣赏
- Aod-net代码相关基础学习