创建数据库
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);
};
}