238 lines
7.5 KiB
JavaScript
238 lines
7.5 KiB
JavaScript
/**
|
|
* indexedDB数据库封装
|
|
* @param {*} db_name 数据库名称
|
|
* @param {*} table_name 表名称
|
|
* @param {*} version 数据库版本
|
|
*/
|
|
var inquiryDB = function (db_name, table_name, version = 1) {
|
|
if (!db_name) {
|
|
alert('初始化数据库参数错误');
|
|
return false;
|
|
}
|
|
|
|
// 检测是否支持indexDB
|
|
var indexedDB =
|
|
window.indexedDB ||
|
|
window.webkitIndexedDB ||
|
|
window.mozIndexedDB ||
|
|
window.msIndexedDB;
|
|
if (!indexedDB) {
|
|
alert('你的浏览器不支持IndexedDB');
|
|
return false;
|
|
}
|
|
|
|
var obj = new Object();
|
|
obj.name = db_name;
|
|
obj.version = version;
|
|
obj.db = {};
|
|
// 初始化表名
|
|
obj.tableName = table_name;
|
|
|
|
/**
|
|
* 新增一条聊天记录
|
|
* @param {*} msg 消息内容
|
|
* @param {*} cb 回调
|
|
*/
|
|
obj.addMsg = function (msg, cb) {
|
|
obj.db = window.indexedDB.open(obj.name, version);
|
|
obj.db.onsuccess = function (evt) {
|
|
var db = evt.target.result;
|
|
//使用事务
|
|
var store = db.transaction(obj.tableName, "readwrite").objectStore(obj.tableName);
|
|
var save = store.add(msg);
|
|
cb(save);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 查询全部聊天记录
|
|
* @param {*} cb 回调函数
|
|
*/
|
|
obj.getDataAll = function (cb) {
|
|
//查询到结果
|
|
obj.db = window.indexedDB.open(obj.name, version);
|
|
obj.db.onsuccess = function (e) {
|
|
var db = e.target.result;
|
|
var store = db.transaction(obj.tableName, 'readwrite').objectStore(obj.tableName);
|
|
var rowData = [];
|
|
store.openCursor().onsuccess = function (event) {
|
|
var cursor = event.target.result;
|
|
if (!cursor && cb) {
|
|
cb({
|
|
data: rowData
|
|
});
|
|
return;
|
|
}
|
|
rowData.push(cursor.value);
|
|
cursor.continue();
|
|
};
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 根据键查询聊天记录
|
|
* @param {*} key 查找键值
|
|
* @param {*} cb 回调函数
|
|
*/
|
|
obj.getDataKey = function (key, cb) {
|
|
//查询到结果
|
|
obj.db = window.indexedDB.open(obj.name, version);
|
|
obj.db.onsuccess = function (e) {
|
|
var db = e.target.result;
|
|
var store = db.transaction(obj.tableName, 'readwrite').objectStore(obj.tableName);
|
|
var res = store.get(key);
|
|
res.onsuccess = function (event) {
|
|
var data = event.target.result;
|
|
cb({
|
|
data: data
|
|
});
|
|
};
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 根据索引查询聊天记录
|
|
* @param {*} indexKey 查找索引
|
|
* @param {*} value 查找值
|
|
* @param {*} cb 回调函数
|
|
*/
|
|
obj.getDataIndexKey = function (indexKey, value, cb) {
|
|
//查询到结果
|
|
obj.db = window.indexedDB.open(obj.name, version);
|
|
obj.db.onsuccess = function (e) {
|
|
var db = e.target.result;
|
|
var store = db.transaction(obj.tableName, 'readwrite').objectStore(obj.tableName);
|
|
var res = store.index(indexKey);
|
|
res.get(value).onsuccess = function (event) {
|
|
var data = event.target.result;
|
|
cb({
|
|
data: data
|
|
});
|
|
};
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 分页显示数据
|
|
* @param {*} page 页数
|
|
* @param {*} limit 条数
|
|
* @param {*} cb 回调
|
|
*/
|
|
obj.getDataByPager = function (page, limit = 15, cb) {
|
|
//查询到结果
|
|
obj.db = window.indexedDB.open(obj.name, version);
|
|
obj.db.onsuccess = function (e) {
|
|
var db = e.target.result;
|
|
var store = db.transaction(obj.tableName, 'readwrite').objectStore(obj.tableName);
|
|
// 数据总数
|
|
var count = store.count();
|
|
count.onsuccess = function (c_e) {
|
|
var totalNum = c_e.target.result;
|
|
// 第一页
|
|
store.openCursor().onsuccess = function (k_e) {
|
|
var cursor = k_e.target.result;
|
|
// 正负容错
|
|
limit = totalNum < limit ? totalNum : limit;
|
|
if (!cursor) {
|
|
cb({
|
|
data: [],
|
|
total_page: 0,
|
|
r_page: 0,
|
|
});
|
|
return;
|
|
}
|
|
// 第一个键值
|
|
var key = cursor.key;
|
|
// 结束点
|
|
var end = key + (totalNum - 1) - ((page -1) * limit);
|
|
// 起始点
|
|
var start = end - (limit - 1) - ((page -1) * limit);
|
|
// console.log(c_e);
|
|
// console.log(start, end, page, limit, key, totalNum);
|
|
// 分页处理, 获取数据
|
|
var boundKeyRange = IDBKeyRange.bound(start, end, false, false);
|
|
var rowData = [];
|
|
store.openCursor(boundKeyRange).onsuccess = function (event) {
|
|
var cursor = event.target.result;
|
|
if (!cursor && cb) {
|
|
cb({
|
|
data: rowData,
|
|
total_page: Math.ceil(totalNum / limit),
|
|
r_page: page,
|
|
});
|
|
return;
|
|
}
|
|
rowData.push(cursor.value);
|
|
cursor.continue();
|
|
};
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 删除聊天记录
|
|
* @param {*} cb 回调函数
|
|
*/
|
|
obj.delDataAll = function (cb) {
|
|
//查询到结果
|
|
obj.db = window.indexedDB.open(obj.name, version);
|
|
obj.db.onsuccess = function (e) {
|
|
var db = e.target.result;
|
|
var store = db.transaction(obj.tableName, 'readwrite').objectStore(obj.tableName);
|
|
console.log(store);
|
|
var result = store.clear();
|
|
cb(result);
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 创建表
|
|
*/
|
|
obj.addTable = function (result) {
|
|
if (!result.objectStoreNames.contains(obj.tableName)) {
|
|
return result.createObjectStore(obj.tableName, {
|
|
autoIncrement: true,
|
|
keyPath:"id",
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除数据库
|
|
*/
|
|
obj.deleteDB = function (db_name, cb) {
|
|
var db = window.indexedDB.open(db_name, version);
|
|
// db.close();
|
|
db.onsuccess = function (e) {
|
|
var db = e.target.result;
|
|
db.close();
|
|
};
|
|
var del = window.indexedDB.deleteDatabase(db_name);
|
|
cb(del);
|
|
}
|
|
|
|
/**
|
|
* 创建数据库
|
|
*/
|
|
obj.initDB = function () {
|
|
var version = obj.version || 1;
|
|
obj.db = window.indexedDB.open(obj.name, version);
|
|
obj.db.onerror = function (e) {
|
|
console.log(e.currentTarget.error.message);
|
|
};
|
|
obj.db.onsuccess = function (e) {
|
|
// obj.db = e.target.result;
|
|
console.log('数据库连接成功');
|
|
};
|
|
obj.db.onupgradeneeded = function (e) {
|
|
console.log(`数据库版本: ${version}`);
|
|
var store = obj.addTable(e.target.result);
|
|
store.createIndex('msg_id','msg_id',{unique:false});
|
|
};
|
|
}
|
|
|
|
// 初始化数据库, indexedDB是异步的所以进行延迟返回
|
|
obj.initDB();
|
|
return obj;
|
|
}; |