indexedDB是一个事务型数据库系统,同时也是基于javascript的面向对象的数据库,它可以存储大量结构化数据
首先是打开数据库
var request=window.indexedDB.open(this.name)
//打开数据库
request.onsuccess=function(event){ this.db=request.result }
//获取数据库实例
第一次创建数据库时会触发他的upgradeneeded方法
request.onupgradeneeded = function (event) {
// 获取数据库实例
var db = request.result;
// 检查是否存在指定的表
if (!db.objectStoreNames.contains(_this.tableName)) {
// 如果不存在,则创建,并指定一个自增的id作为查询依据
db.createObjectStore(_this.tableName, {
keyPath: "id",
autoIncrement: true
});
}
};
获得数据表实例
LocalDB.prototype.getStore = function () {
var transaction = this.db.transaction(this.tableName, 'readwrite');
var objStore = transaction.objectStore(this.tableName);
return objStore;
}
保存数据,支持添加和修改
LocalDB.prototype.set = function (data, callback) {
var objStore = this.getStore();
var request = data.id ? objStore.put(data) : objStore.add(data);
request.onsuccess = function (event) {
callback && callback(event.target.result);
};
}
删除数据
LocalDB.prototype.remove = function (id) {
var objStore = this.getStore();
objStore.delete(id);
}
获取数据
//获取一条数据
LocalDB.prototype.get = function (id, callback) {
var objStore = this.getStore();
var request = objStore.get(id);
request.onsuccess = function (event) {
callback && callback(event.target.result);
}
}
// 获取表中所有的数据
LocalDB.prototype.getAll = function (callback) {
var objStore = this.getStore();
// 打开数据游标
var request = objStore.openCursor();
request.onsuccess = function (event) {
var cursor = event.target.result;
if (cursor) {
// 如果游标存在,执行回调并传入当前数据行
callback && callback(cursor.value);
// 继续下一行数据
cursor.continue();
}
}
}