import NProgress from "nprogress";
import "nprogress/nprogress.css";
export function openDB(dbName, storeName, version) {
return new Promise((resolve, reject) => {
let indexedDB = window.indexedDB;
var db;
const request = indexedDB.open(dbName, version);
request.onsuccess = function(event) {
db = event.target.result;
resolve(db);
};
request.onerror = function(event) {
reject(event);
};
request.onupgradeneeded = function(event) {
console.log("onupgradeneeded");
db = event.target.result;
let objectStore;
if (!db.objectStoreNames.contains(storeName)) {
objectStore = db.createObjectStore(storeName, { keyPath: "id" });
}
};
});
}
export function addData(db, storeName, data, type) {
return new Promise((resolve, reject) => {
let request = db
.transaction([storeName], "readwrite")
.objectStore(storeName);
if (type == 1) {
request.add(data);
} else {
for (let i = 0; i < data.length; i++) {
request.add(data[i]);
}
}
NProgress.done();
request.onsuccess = function(event) {
resolve(event);
};
request.onerror = function(event) {
throw new Error(event.target.error);
reject(event);
};
});
}
export function getDataByKey(db, storeName, key) {
return new Promise((resolve, reject) => {
let transaction = db.transaction([storeName]);
let objectStore = transaction.objectStore(storeName);
let request = objectStore.get(key);
request.onerror = function(event) {
reject(event);
};
request.onsuccess = function(event) {
resolve(request.result);
};
});
}
export function cursorGetData(db, storeName) {
let list = [];
let store = db
.transaction(storeName, "readwrite")
.objectStore(storeName);
let request = store.openCursor();
return new Promise((resolve, reject) => {
request.onsuccess = function(e) {
let cursor = e.target.result;
if (cursor) {
list.push(cursor.value);
cursor.continue();
} else {
resolve(list);
}
};
request.onerror = function(e) {
reject(e);
};
});
}
export function getDataByIndex(db, storeName, indexName, indexValue) {
let store = db.transaction(storeName, "readwrite").objectStore(storeName);
let request = store.index(indexName).get(indexValue);
return new Promise((resolve, reject) => {
request.onerror = function(e) {
reject(e);
};
request.onsuccess = function(e) {
resolve(e.target.result);
};
});
}
export function cursorGetDataByIndex(db, storeName, indexName, indexValue) {
let list = [];
let store = db.transaction(storeName, "readwrite").objectStore(storeName);
let request = store
.index(indexName)
.openCursor(IDBKeyRange.only(indexValue));
return new Promise((resolve, reject) => {
request.onsuccess = function(e) {
let cursor = e.target.result;
if (cursor) {
list.push(cursor.value);
cursor.continue();
} else {
resolve(list);
}
};
request.onerror = function(ev) {
reject(ev);
};
});
}
export function updateDB(db, storeName, data) {
let request = db
.transaction([storeName], "readwrite")
.objectStore(storeName)
.put(data);
request.onsuccess = function() {
console.log("数据更新成功");
};
request.onerror = function() {
console.log("数据更新失败");
};
}
export function deleteDB(db, storeName, id) {
let request = db
.transaction([storeName], "readwrite")
.objectStore(storeName)
.delete(id);
return new Promise((resolve, reject) => {
request.onsuccess = function(ev) {
resolve(ev);
};
request.onerror = function(ev) {
resolve(ev);
};
});
}
export function deleteDBAll(dbName) {
let deleteRequest = window.indexedDB.deleteDatabase(dbName);
return new Promise((resolve, reject) => {
deleteRequest.onerror = function(event) {
console.log("删除失败");
};
deleteRequest.onsuccess = function(event) {
console.log("删除成功");
};
});
}
export function closeDB(db) {
db.close();
console.log("数据库已关闭");
}
export default {
openDB,
addData,
getDataByKey,
cursorGetData,
getDataByIndex,
cursorGetDataByIndex,
updateDB,
deleteDB,
deleteDBAll,
closeDB
};
打开数据库:
const dbName = "modelglft",storeName = "modelglft";
const db = await IndexDB.openDB(dbName, storeName, 1);
获取数据库中某id对应的值:
var datas = IndexDB.getDataByKey(db, storeName, "glft");
调用新增:
IndexDB.addData(
db,
storeName,
[
{ id: "glft", value: glftBlob },
{ id: "model1", value: model1 },
{ id: "model2", value: model2 }
],
0
);
调用更新数据(data值应该是键值对,不能像增加时一样使用数组)
IndexDB.updateDB(
db,
storeName,
{ id: "glft", value: glftBlob },
{ id: "model1", value: model1 },
{ id: "model2", value: model2 },
);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律