创建数据库
function openDB(name, version, datas, done) {
var version = version || 1;
var request = {};
var isException = false;
try {
request = window.indexedDB.open(name, version);
} catch (e) {
isException = true;
console.log('打开本地IndexDB' + name + '失败, ' + e.message);
}
if (isException) {
return;
}
request.onupgradeneeded = function (e) {
var db = e.target.result;
if (!db.objectStoreNames.contains(myDB.table)) {
db.createObjectStore(myDB.table, {keyPath: "signTime"});
}
console.log(myDB.table + ", 数据库创建表成功");
};
request.onsuccess = function (e) {
myDB.db = e.target.result;
console.log(name + ", 打开数据库成功");
addData(myDB.db, myDB.table, datas, done);
};
request.onerror = function (e) {
console.log(name + ", 打开数据或创建数据库错误" + e.currentTarget.error.message);
done(e);
};
}
添加数据
function addData(db, storeName, datas, done) {
if (db.objectStoreNames.length === 0) {
console.log(db.name + ', 数据库表未建立');
window.indexedDB.deleteDatabase(db.name);
return;
}
var store = {};
var transaction = {};
var isException = false;
try {
transaction = db.transaction(storeName, 'readwrite');
store = transaction.objectStore(storeName);
} catch (e) {
isException = true;
console.log('本地缓存数据失败, ' + e.message);
}
if (isException) {
return;
}
start_time = new Date().getTime();
for (var i = 0; i < datas.length; i++) {
var request = store.add(datas[i]);
request.onerror = function () {
console.log(db.name + ', 数据库中已有该数据');
};
request.onsuccess = function () {
console.log(db.name + ', 数据存储请求发起完毕');
};
}
transaction.oncomplete = function() {
console.log(db.name + ', 保存数据事务提交完毕');
done();
};
transaction.onerror = function() {
console.log(db.name + ', 打开事务出错');
done();
};
}
取出全部数据
/**
* 通过游标遍历数据库的全部数据
* @param db
* @param storeName
*/
function fetchStoreByCursor(db, storeName, done) {
end_time = new Date().getTime();
var sendArr = [];
if (db.objectStoreNames.length === 0) {
console.log(db.name + ', 数据库表未建立');
return;
}
try {
db.transaction(storeName).objectStore(storeName).openCursor().onsuccess = function (event) {
var cursor = event.target.result;
if (cursor) {
var record = cursor.value;
record.by1 = end_time - start_time;
sendArr.push(cursor.value);
cursor.continue();
} else {
done(sendArr);
}
}
} catch(e) {
console.log(db.name + ', 读取数据失败!' + ', ' + e.message);
}
}
后台发送数据
/**
* 向后台发送数据
* @param types 剩余要处理的数据类型
* @param type 正在处理的数据类型
* @param url 后台请求的地址
* @param datas 要发送的数据
*/
function postData(types, type, url, datas) {
console.log(type + ", 开始发送数据");
if (datas.length === 0) {
console.log(type + ', 没有数据待发送');
if (types.length > 0) {
sendRecordData(types, url);
}
return;
}
$.ajax({
type: "POST",
url: url,
data: {sendArrJson: JSON.stringify(datas), type: type},
success: function (e) {
var ret = eval("(" + e + ")");
if (ret.type) {
console.log(type + ', 本地数据上传完毕');
console.log(type + ', 开始清除本地缓存');
clearData(ret.type + '', function (success) {
if(success !== 1) {
console.log(type + ', 清除本地缓存失败');
if (types.length > 0) {
sendRecordData(types, url);
}
return;
}
console.log(type + ', 清除本地缓存成功');
if ('1' !== type) {
sendRecordData(types, url);
return;
}
var saveDatas = [];
for (var i in datas) {
var data = datas[i];
var keyAms = data.keyAm.split('@@');
if (keyAms.length < 5 || keyAms[4] === '2') {
continue;
}
saveDatas.push(data);
}
saveDataToIndexDB(type, saveDatas, function () {
console.log('本地缓存在线数据完毕!');
if (types.length > 0) {
sendRecordData(types, url);
}
});
});
}
},
failure: function() {
console.log('发送数据失败');
if (types.length > 0) {
sendRecordData(types, url);
}
},
error: function() {
console.log('发送数据失败');
if (types.length > 0) {
sendRecordData(types, url);
}
}
});
}
清除数据
function clearData(type, done) {
console.log(type + ', 准备删除数据');
var DBName = '';
var tableName = 'record';
var isException = false;
var DBOpenRequest = {};
try {
DBOpenRequest = window.indexedDB.open(DBName);
} catch(e) {
clearDataErrorFun(DBName, done, e);
isException = true;
}
if (isException) {
return;
}
var transaction = {};
DBOpenRequest.onsuccess = function() {
var db = DBOpenRequest.result;
if (!db.objectStoreNames.contains(tableName)) {
console.log(DBName + ', 没有待删除的数据');
if (done) {
done(1);
}
return;
}
try {
transaction = db.transaction(tableName, 'readwrite');
} catch(e) {
clearDataErrorFun(DBName, done, e);
isException = true;
}
if (isException) {
return;
}
var objectStore = transaction.objectStore(tableName);
transaction.oncomplete = function() {
console.log(DBName + ', 数据删除事务提交');
if (done) {
done(1);
}
};
var objectStoreRequest = objectStore.clear();
objectStoreRequest.onsuccess = function() {
console.log(DBName + ', 数据删除请求');
};
objectStoreRequest.onerror = function() {
clearDataErrorFun(DBName, done);
};
};
DBOpenRequest.onerror = function() {
clearDataErrorFun(DBName, done);
};
}