// 初始化数据库函数 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); // }; // }