indexedDB存储

来源:互联网 发布:mac safari 强制刷新 编辑:程序博客网 时间:2024/06/07 08:31

最近做了套聊天系统,页面采用的是用indexedDB进行本地存储,下面将indexedDB进行了下整理,做个笔记。
1.相比于服务端用到的数据库,indexedDB作为客户端的一种数据库,最大的区别就是作为对象保存数据,用法不难。
第一步:
先解决兼容问题,定义indexedDB
var indexedDB = window.indexedDB || window.msIndexedDB || window.mozIndexedDB || window.webkitIndexedDB ;
第二步打开indexedDB,indexedDB.open(“users”); “users”是数据库的名称,如果有,就打开,没有就创建,都会返回一个对象,对象都有onsuccess 和 onerror事件
var request,database;
request = indexedDB.open(“users”);
request.onerror = function(event) {
alert(event.target.errorCode);
};
request.onsuccess = function(event){
database = event.target.result;
}
第三步,这是我封装的一个
function openDB(name,version,cd){
var version = version || 1;
var request = window.indexedDB.open(name,version);
request.onerror = function(event){
alert(‘indexedDB数据库出错’);
}
request.onsuccess = function(event){
var db = event.target.result;
alert(‘indexedDB数据库成功’);
cd(db);
}
request.onupgradeneeded = function(event) {
var db = event.target.result;
if(!db.objectStoreNames.contains(‘users’)){
var store = db.createObjectStore(‘users’,{keyPath:’username’});
store.createIndex(‘finame’,’firstname’,{unique:true})
}
}
}

db.createObjectStore(‘users’,{keyPath:’username’});
这个是创建对象存储空间
store.createIndex(‘finame’,’firstname’,{unique:true})创建索引
如下我调用的;
var user ={
username:”007”,
firstname:”Jamesd”,
lastname:”Bond”,
password:”foo”
};
如下,调用并将user数据放到indexedDB中
openDB(‘users’,1,function(db){
var transaction = db.transaction(‘users’,’readwrite’);
var store = transaction.objectStore(‘users’);
store.put(user)
})
db.transaction(‘users’,’readwrite’);是加载users存储空间的数据,并给它读写权限
transaction.objectStore(‘users’);objectStore()方法传入存储空间的名称,就可以通过add() put() delete() clear() get()进行传参和请求
openDB(‘users’,1,function(db){
var request = db.transaction(‘users’,’readwrite’).objectStore(‘users’).get(“007”);
request.onerror = function(event) {
alert(event.target.errorCode);
};
request.onsuccess = function(event){
database = event.target.result;
alert(database .firstname)
}
})
获取值有几种方法
1.get()查询
2.openCursor()使用游标查询
var request = db.transaction(‘users’,’readwrite’).objectStore(‘users’).openCursor();
request.onsuccess = function(event){
var cursor = event.target.result;
if(cursor){
if(cursor.key == “007”) {
value = cursor.value;
value.password = “magic”;
updateRequest = cursor.update(value);
//deleteRequest = cursor.delete();
updateRequest.onsuccess = function(event){
//处理成功
}
updateRequest.onerror = function(event){
//处理失败
}
}
cursor.continue();
}else{
console.log(‘Done)
}
}
3通过键范围进行查询
var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange ;
3.1 only()
var onlyRange = IDBKeyRange.only(‘007’);
3.2
从007开始到最后,含有007
var lowerRange = IDBKeyRange.lowerBound(‘007’);
从开始到009 ,含有009
var upperRange = IDBKeyRange.upperBound(‘009’)

想不包含可以用true;
var boundRange = IDBKeyRange.bound(“007”,”009”,true,true);
4.
request = store.openCursor(boundRange);
request = store.openCursor(boundRange,prev)
request = store.openCursor(boundRange,next)
5.通过索引来查
var store = db.transaction(‘users’,’readwrite’).objectStore(‘users’);
var index = store.index(‘username’);
var request = index.openCursor();
var request = index.openKeyCursor(); 子返回主键

原创粉丝点击