indexedDb.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. // 初始化数据库函数
  2. export async function initDatabase() {
  3. return new Promise((resolve, reject) => {
  4. // 不指定版本号以使用现有的最新版本
  5. const request = indexedDB.open("FileDataDB");
  6. request.onsuccess = (event) => {
  7. const db = event.target.result;
  8. resolve(db);
  9. };
  10. request.onerror = (event) => {
  11. console.error("Failed to open IndexedDB:", event.target.error);
  12. reject(event.target.error);
  13. };
  14. });
  15. // return new Promise((resolve, reject) => {
  16. // const request = indexedDB.open("FileDataDB");
  17. // // 处理数据库的升级逻辑,仅在数据库版本更新时调用
  18. // request.onupgradeneeded = (event) => {
  19. // const db = event.target.result;
  20. // // 如果不存在 "files" 对象存储,则创建
  21. // if (!db.objectStoreNames.contains("files")) {
  22. // db.createObjectStore("files", { keyPath: "id" });
  23. // }
  24. // };
  25. // // 数据库打开成功
  26. // request.onsuccess = (event) => {
  27. // const db = event.target.result;
  28. // resolve(db);
  29. // };
  30. // // 数据库打开失败
  31. // request.onerror = (event) => {
  32. // console.error("无法连接到数据库:", event.target.error);
  33. // reject(event.target.error);
  34. // };
  35. // });
  36. }
  37. //判断是否存在这个数据库及表
  38. export function checkObjectStoreExists(dbName, storeName) {
  39. return new Promise((resolve, reject) => {
  40. const request = indexedDB.open(dbName);
  41. request.onsuccess = (event) => {
  42. const db = event.target.result;
  43. const storeExists = db.objectStoreNames.contains(storeName);
  44. db.close();
  45. resolve(storeExists);
  46. };
  47. request.onerror = (event) => {
  48. console.error("数据库打开失败:", event.target.error);
  49. reject(event.target.error);
  50. };
  51. });
  52. }
  53. // 获取indexedDB所有数据
  54. export async function getDataFromIndexedDB() {
  55. return new Promise((resolve, reject) => {
  56. const request = indexedDB.open("FileDataDB");
  57. request.onsuccess = (event) => {
  58. const db = event.target.result;
  59. const transaction = db.transaction(["files"], "readonly");
  60. const store = transaction.objectStore("files");
  61. // 使用 getAll() 方法获取全部数据
  62. const getRequest = store.getAll();
  63. getRequest.onsuccess = () => {
  64. if (getRequest.result && getRequest.result.length > 0) {
  65. // 假设获取的数据中包含 fileDataArray 数据
  66. const fileData = getRequest.result.find(
  67. (item) => item.id === "fileDataArray"
  68. );
  69. resolve(fileData ? fileData.data : []); // 返回文件数据或空数组
  70. } else {
  71. resolve([]); // 数据库为空时返回空数组
  72. }
  73. };
  74. getRequest.onerror = (event) => {
  75. console.error(
  76. "Failed to retrieve data from IndexedDB:",
  77. event.target.error
  78. );
  79. reject(event.target.error);
  80. };
  81. };
  82. request.onerror = (event) => {
  83. console.error("Failed to open IndexedDB:", event.target.error);
  84. reject(event.target.error);
  85. };
  86. });
  87. }
  88. // 清除整个对象存储
  89. export async function clearAllDataFromIndexedDB() {
  90. return new Promise((resolve, reject) => {
  91. const versionRequest = indexedDB.open("FileDataDB");
  92. versionRequest.onsuccess = (event) => {
  93. const db = event.target.result;
  94. const currentVersion = db.version;
  95. db.close();
  96. // 使用当前版本或更高版本打开数据库
  97. const request = indexedDB.open("FileDataDB", currentVersion);
  98. request.onsuccess = (event) => {
  99. const db = event.target.result;
  100. const transaction = db.transaction(["files"], "readwrite");
  101. const store = transaction.objectStore("files");
  102. const clearRequest = store.clear();
  103. clearRequest.onsuccess = () => {
  104. console.log("All data cleared from IndexedDB.");
  105. resolve();
  106. };
  107. clearRequest.onerror = (event) => {
  108. console.error(
  109. "Failed to clear data from IndexedDB:",
  110. event.target.error
  111. );
  112. reject(event.target.error);
  113. };
  114. };
  115. request.onerror = (event) => {
  116. console.error("Failed to open IndexedDB:", event.target.error);
  117. reject(event.target.error);
  118. };
  119. };
  120. versionRequest.onerror = (event) => {
  121. console.error("Failed to retrieve database version:", event.target.error);
  122. reject(event.target.error);
  123. };
  124. });
  125. }
  126. //往indexedDB 某一个表里添加一条数据
  127. export async function storeSetData(db, storeName, key, newFileData, callback) {
  128. if (!db) {
  129. console.error("数据库未初始化.");
  130. return;
  131. }
  132. const transaction = db.transaction([storeName], "readwrite");
  133. const store = transaction.objectStore(storeName);
  134. // 尝试获取已存在的 `fileDataArray`
  135. const getRequest = store.get(key);
  136. getRequest.onsuccess = () => {
  137. const fileDataArray = getRequest.result ? getRequest.result.data : [];
  138. console.log("当前 fileDataArray:", fileDataArray);
  139. fileDataArray.push(newFileData); // 新数据添加到数组
  140. const putRequest = store.put({
  141. id: key,
  142. data: fileDataArray,
  143. });
  144. putRequest.onsuccess = () => {
  145. console.log("数据成功保存至 IndexedDB");
  146. if (callback && typeof callback === "function") {
  147. callback();
  148. }
  149. };
  150. putRequest.onerror = (event) => {
  151. console.error("在 IndexedDB 中更新数据出错:", event.target.error);
  152. };
  153. };
  154. getRequest.onerror = (event) => {
  155. console.error("从 IndexedDB 检索数据时出错:", event.target.error);
  156. };
  157. }
  158. // export async function storeSetData(db, storeName, key, newFileData, callback) {
  159. // if (!db) {
  160. // console.error("数据库未初始化.");
  161. // return;
  162. // }
  163. // const transaction = db.transaction([storeName], "readwrite");
  164. // const store = transaction.objectStore(storeName);
  165. // const getRequest = store.get(key);
  166. // getRequest.onsuccess = () => {
  167. // const fileDataArray = getRequest.result ? getRequest.result.data : [];
  168. // console.log(fileDataArray, "qiannewFileData");
  169. // fileDataArray.push(newFileData);
  170. // const putRequest = store.put({
  171. // id: key,
  172. // data: fileDataArray,
  173. // });
  174. // putRequest.onsuccess = () => {
  175. // if (callback && typeof callback === "function") {
  176. // callback();
  177. // }
  178. // };
  179. // putRequest.onerror = (event) => {
  180. // console.error("在IndexedDB中更新数据出错:", event.target.error);
  181. // };
  182. // };
  183. // getRequest.onerror = (event) => {
  184. // console.error("从IndexedDB检索数据时出错:", event.target.error);
  185. // };
  186. // }