htm5本地存储方案——indexdb的封装
不BB直接上代码
/*封装IndexdDB*/
var localDatabase = { };
localDatabase.dbName = "yiliDB";
localDatabase.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
localDatabase.db = null;
localDatabase.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;
localDatabase.IDBCursor = window.IDBCursor || window.webkitIDBCursor;
localDatabase.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
localDatabase.indexedDB.onerror = function(e) {
console.log("Database error: " + e.target.errorCode);
};
//删除数据库
localDatabase.deleteIndexdDB = function() {
var deleteDbRequest = localDatabase.indexedDB.deleteDatabase(localDatabase.dbName);
deleteDbRequest.onsuccess = function(event) {
console.log('Database deleted');
localDatabase.db = null;
};
deleteDbRequest.onerror = function(e) {
console.log("Database error: " + e.target.errorCode); };
};
//打开数据库
localDatabase.openIndexdDB = function(callback) {
console.log("init IndexdDB");
try {
var openRequest = localDatabase.indexedDB.open(localDatabase.dbName);
openRequest.onerror = function(e) {
callback("Database error: " + e.target.errorCode);
};
openRequest.onsuccess = function(event) {
localDatabase.db = openRequest.result;
console.log("Open IndexdDB success.");
callback("success");
localDatabase.db.onversionchange = function() {
console.log("DB close");
localDatabase.db.close();
}; };
openRequest.onupgradeneeded = function(evt) {
console.log('Creating object stores');
var MessageStore = evt.currentTarget.result.createObjectStore("message");
MessageStore.createIndex("userid", "userid", {
unique: false
}); }; } catch(e1) { console.log(e1); } };
再来个测试的例子
//添加消息
localDatabase.addMessageToIndexDB = function(obj, userid) {
try {
console.log(localDatabase.db);
if(localDatabase != null && localDatabase.db != null) {
var transaction = localDatabase.db.transaction("message", "readwrite");
var store = transaction.objectStore("message");
var request = store.get(userid);
request.onsuccess = function(e) {
var result = e.target.result;
var exist = 0;
if(typeof result != 'undefined') {
for(var i = 0; i < result.length; i++) {
if(result[i].userid == obj.userid) {
result[i] = obj;
exist++;
break;
}
}
if(!exist) {
result.push(obj);
}
store.put(result, userid);
} else {
store.add([obj], userid);
}
};
}
} catch(e) {
console.log(e)
}
};
//获取消息
localDatabase.getMessage = function(userid, callback) {
try { if(localDatabase != null && localDatabase.db != null) { var store = localDatabase.db.transaction("message").objectStore("message");
// var index = store.index("userid");
// var request = index.openCursor(IDBKeyRange.only(userid));
request = store.get(userid);
request.onsuccess = function(res) {
var result = res.target.result;
if(typeof result != 'undefined') {
callback(result);
} else {
callback(null);
} }; }
} catch(e) { console.log(e); } };
htm5本地存储方案——indexdb的封装的更多相关文章
- htm5本地存储方案——websql的封装
一.websql 简介 在HTML5中,大大丰富了客户端本地可以存储的内容,添加了很多功能来将原本必须保存在服务器上的数据转为保存在客户端本地,从而大大提高了Web应用程序的性能,减轻了服务器端的 ...
- [转]App离线本地存储方案
App离线本地存储方案 原文地址:http://ask.dcloud.net.cn/article/166 HTML5+的离线本地存储有如下多种方案:HTML5标准方案:cookie.localsto ...
- [转]Dcloud App离线本地存储方案
原文地址:http://ask.dcloud.net.cn/article/166 HTML5+的离线本地存储有如下多种方案:HTML5标准方案:cookie.localstorage.session ...
- Android本地存储方案 SharedPreferences
原文地址:http://www.yanwushu.com/post/43.html 存储位置 SharedPreferences数据保存在: /data /data/<package_name& ...
- JavaScript本地存储实践(html5的localStorage和ie的userData)
http://www.css88.com/archives/3717 JavaScript本地存储实践(html5的localStorage和ie的userData) 发表于 2011年06月11日 ...
- 小强的HTML5移动开发之路(19)——HTML5 Local Storage(本地存储)
来自:http://blog.csdn.net/dawanganban/article/details/18218701 一.浏览器存储的发展历程 本地存储解决方案很多,比如Flash SharedO ...
- web前端实现本地存储
当我们在提及web前端本地存储的时候,首先需要介绍一下本地化存储的概念和历史.本地化存储从来不是一个新奇的概念,因为web应用程序一直在追求的就是媲美甚至超越桌面应用程序.但是桌面应用程序一直优于we ...
- 本地存储localStorage以及它的封装接口store.js的使用
本地存储localStorage以及它的封装接口store.js的使用 sublime-text chrome javascript readyGo 2016年11月20日发布 0 推荐 9 收藏 ...
- HTML5 学习总结(三)——本地存储
一.HTML4客户端存储 B/S架构的应用大量的信息存储在服务器端,客户端通过请求响应的方式从服务器获得数据,这样集中存储也会给服务器带来相应的压力,有些数据可以直接存储在客户端,传统的Web技术中会 ...
随机推荐
- 使用IDEA复用代码时常见问题
使用IDEA复用代码时常见问题 觉得有用的话,欢迎一起讨论相互学习~Follow Me 作为新手在直接复用别人的java代码并使用IDEA进行二次开发时,经常出现一些奇怪的问题,在此做一些总结~ In ...
- tomcat 性能检测
一.jconsole 1.tomcat在windows上,start方式启动 在catalina.bat 文件中的:doRun和:doStart下添加以下代码 (没有换行) set JAVA_OPTS ...
- bzoj千题计划114:bzoj1791: [Ioi2008]Island 岛屿
http://www.lydsy.com/JudgeOnline/problem.php?id=1791 就是求所有基环树的直径之和 加手工栈 #include<cstdio> #incl ...
- SQL语句(十七)综合练习_分组查询_内嵌查询_视图使用
Select * from Student Select * From Course Select * from SC --子查询 低于总平均成绩的女同学成绩 Select Grade from St ...
- 生成电脑的ssh key值
通过命令 ssh-keygen -t rsa -C "你的邮箱" 然后在用户目录下找到.ssh文件夹,这个是隐藏的,然后打开id_rsa.pub文件,里面的内容就是需要的ssh k ...
- jQuery 动态标签生成插件
前言: 最近对js的插件封装特别感兴趣,无耐就目前的技术想做到js的完全封装,还是有一定困难,就基于jQuery封装了一个小的插件,而且是基于对象级开发的,不是添加全局方法.高深的语法几乎没有,就有一 ...
- 【经验分享】URL链接地址最长是多少?
近期在做一个Hot Fix,其中有个界面在IE6下超链接无法打开,经查是链接地址太长,2161个字节,已经超出ie6,7的长度限制,现把发现此问题的过程分享给大家. ===过程===== 1.万恶的i ...
- Python概念-__del__的悲伤
__del__了不得了,这个是在回收实例化对象时触发执行的方法 每当del 实例化对象时会触发 或者是程序结束时,会触发,总之就是实例化对象失效时都会执行__del__方法 代码示例: class F ...
- Linux基础-yum软件包管理
任务目标:自定义yum仓库:createrepo,自定义repo文件,使用yum命令安装httpd软件包,卸载httpd软件包:yum –y remove 软件名 ,使用yum安装组件'KDE 桌面' ...
- D - Doing Homework HDU - 1074 (状压dp)
题目链接:https://cn.vjudge.net/contest/68966#problem/D 具体思路:我们可以把每个情况都枚举出来,然后用递归的形式求出最终的情况. 比如说 我们要求 10 ...