123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- // 初始化数据库函数
- export async function initDatabase() {
- return new Promise((resolve, reject) => {
- // 不指定版本号以使用现有的最新版本
- const request = indexedDB.open("FileDataDB");
- request.onsuccess = (event) => {
- const db = event.target.result;
- resolve(db);
- };
- request.onerror = (event) => {
- console.error("Failed to open IndexedDB:", event.target.error);
- reject(event.target.error);
- };
- });
- // return new Promise((resolve, reject) => {
- // const request = indexedDB.open("FileDataDB");
- // // 处理数据库的升级逻辑,仅在数据库版本更新时调用
- // request.onupgradeneeded = (event) => {
- // const db = event.target.result;
- // // 如果不存在 "files" 对象存储,则创建
- // if (!db.objectStoreNames.contains("files")) {
- // db.createObjectStore("files", { keyPath: "id" });
- // }
- // };
- // // 数据库打开成功
- // request.onsuccess = (event) => {
- // const db = event.target.result;
- // resolve(db);
- // };
- // // 数据库打开失败
- // request.onerror = (event) => {
- // console.error("无法连接到数据库:", event.target.error);
- // reject(event.target.error);
- // };
- // });
- }
- //判断是否存在这个数据库及表
- export function checkObjectStoreExists(dbName, storeName) {
- return new Promise((resolve, reject) => {
- const request = indexedDB.open(dbName);
- request.onsuccess = (event) => {
- const db = event.target.result;
- const storeExists = db.objectStoreNames.contains(storeName);
- db.close();
- resolve(storeExists);
- };
- request.onerror = (event) => {
- console.error("数据库打开失败:", event.target.error);
- reject(event.target.error);
- };
- });
- }
- // 获取indexedDB所有数据
- export async function getDataFromIndexedDB() {
- return new Promise((resolve, reject) => {
- const request = indexedDB.open("FileDataDB");
- request.onsuccess = (event) => {
- const db = event.target.result;
- const transaction = db.transaction(["files"], "readonly");
- const store = transaction.objectStore("files");
- // 使用 getAll() 方法获取全部数据
- const getRequest = store.getAll();
- getRequest.onsuccess = () => {
- if (getRequest.result && getRequest.result.length > 0) {
- // 假设获取的数据中包含 fileDataArray 数据
- const fileData = getRequest.result.find(
- (item) => item.id === "fileDataArray"
- );
- resolve(fileData ? fileData.data : []); // 返回文件数据或空数组
- } else {
- resolve([]); // 数据库为空时返回空数组
- }
- };
- getRequest.onerror = (event) => {
- console.error(
- "Failed to retrieve data from IndexedDB:",
- event.target.error
- );
- reject(event.target.error);
- };
- };
- request.onerror = (event) => {
- console.error("Failed to open IndexedDB:", event.target.error);
- reject(event.target.error);
- };
- });
- }
- // 清除整个对象存储
- export async function clearAllDataFromIndexedDB() {
- return new Promise((resolve, reject) => {
- const versionRequest = indexedDB.open("FileDataDB");
- versionRequest.onsuccess = (event) => {
- const db = event.target.result;
- const currentVersion = db.version;
- db.close();
- // 使用当前版本或更高版本打开数据库
- const request = indexedDB.open("FileDataDB", currentVersion);
- request.onsuccess = (event) => {
- const db = event.target.result;
- const transaction = db.transaction(["files"], "readwrite");
- const store = transaction.objectStore("files");
- const clearRequest = store.clear();
- clearRequest.onsuccess = () => {
- console.log("All data cleared from IndexedDB.");
- resolve();
- };
- clearRequest.onerror = (event) => {
- console.error(
- "Failed to clear data from IndexedDB:",
- event.target.error
- );
- reject(event.target.error);
- };
- };
- request.onerror = (event) => {
- console.error("Failed to open IndexedDB:", event.target.error);
- reject(event.target.error);
- };
- };
- versionRequest.onerror = (event) => {
- console.error("Failed to retrieve database version:", event.target.error);
- reject(event.target.error);
- };
- });
- }
- //往indexedDB 某一个表里添加一条数据
- export async function storeSetData(db, storeName, key, newFileData, callback) {
- if (!db) {
- console.error("数据库未初始化.");
- return;
- }
- const transaction = db.transaction([storeName], "readwrite");
- const store = transaction.objectStore(storeName);
- // 尝试获取已存在的 `fileDataArray`
- const getRequest = store.get(key);
- getRequest.onsuccess = () => {
- const fileDataArray = getRequest.result ? getRequest.result.data : [];
- console.log("当前 fileDataArray:", fileDataArray);
- fileDataArray.push(newFileData); // 新数据添加到数组
- const putRequest = store.put({
- id: key,
- data: fileDataArray,
- });
- putRequest.onsuccess = () => {
- console.log("数据成功保存至 IndexedDB");
- if (callback && typeof callback === "function") {
- callback();
- }
- };
- putRequest.onerror = (event) => {
- console.error("在 IndexedDB 中更新数据出错:", event.target.error);
- };
- };
- getRequest.onerror = (event) => {
- console.error("从 IndexedDB 检索数据时出错:", event.target.error);
- };
- }
- // export async function storeSetData(db, storeName, key, newFileData, callback) {
- // if (!db) {
- // console.error("数据库未初始化.");
- // return;
- // }
- // const transaction = db.transaction([storeName], "readwrite");
- // const store = transaction.objectStore(storeName);
- // const getRequest = store.get(key);
- // getRequest.onsuccess = () => {
- // const fileDataArray = getRequest.result ? getRequest.result.data : [];
- // console.log(fileDataArray, "qiannewFileData");
- // fileDataArray.push(newFileData);
- // const putRequest = store.put({
- // id: key,
- // data: fileDataArray,
- // });
- // putRequest.onsuccess = () => {
- // if (callback && typeof callback === "function") {
- // callback();
- // }
- // };
- // putRequest.onerror = (event) => {
- // console.error("在IndexedDB中更新数据出错:", event.target.error);
- // };
- // };
- // getRequest.onerror = (event) => {
- // console.error("从IndexedDB检索数据时出错:", event.target.error);
- // };
- // }
|