indexedDB存儲

使用

setDBData({ id: 'name', value: '張三', expire: new Date().getTime() + 10000 }, 'info', 'infoDB')
console.log(getDBData('name', 'info', 'infoDB')); 

添加或更新數據

async function setDBData(data,storeName = "storeName",dbName = "dbName",version
) {const db = await openDB(dbName, storeName, version);const data_ = await getDataByKey(db, storeName, data.id);// 如果該主鍵對應的數據已存在,則做更新操作if (data_) {return updateDB(db, storeName, data);}return addData(db, storeName, data);
}

獲取數據

async function getDBData(key,storeName = "storeName",dbName = "dbName",version
) {const db = await openDB(dbName, storeName, version);const data_ = await getDataByKey(db, storeName, key);// 設置了有效期,且已過期,則刪除數據if (data_?.expire && data_.expire < new Date().getTime()) {await deleteDB(db, storeName, key);return;}return data_;
}

打開數據庫

function openDB(dbName, storeName, version = 1) {return new Promise((resolve, reject) => {const indexedDB = window.indexedDB;let 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" }); // 創建表// objectStore.createIndex('name', 'name', { unique: true }) // 創建索引 可以讓你搜索任意字段}};});
}

新增數據

function addData(db, storeName, data) {return new Promise((resolve, reject) => {const request = db.transaction([storeName], "readwrite") // 事務對象 指定表格名稱和操作模式("只讀"或"讀寫").objectStore(storeName) // 倉庫對象.add(data);request.onsuccess = function (event) {resolve(event);};request.onerror = function (event) {reject(event);throw new Error(event.target.error);};});
}

通過主鍵讀取數據

function getDataByKey(db, storeName, key) {return new Promise((resolve, reject) => {const transaction = db.transaction([storeName]); // 事務const objectStore = transaction.objectStore(storeName); // 倉庫對象const request = objectStore.get(key);request.onerror = function (event) {reject(event);};request.onsuccess = function (event) {resolve(request.result);};});
}

通過游標讀取數據

function cursorGetData(db, storeName) {const list = [];const store = db.transaction(storeName, "readwrite") // 事務.objectStore(storeName); // 倉庫對象const request = store.openCursor(); // 指針對象return new Promise((resolve, reject) => {request.onsuccess = function (e) {const cursor = e.target.result;if (cursor) {// 必須要檢查list.push(cursor.value);cursor.continue(); // 遍歷了存儲對象中的所有內容} else {resolve(list);}};request.onerror = function (e) {reject(e);};});
}

通過索引讀取數據

function getDataByIndex(db, storeName, indexName, indexValue) {const store = db.transaction(storeName, "readwrite").objectStore(storeName);const 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);};});
}

通過索引和游標查詢記錄

function cursorGetDataByIndex(db, storeName, indexName, indexValue) {const list = [];const store = db.transaction(storeName, "readwrite").objectStore(storeName); // 倉庫對象const request = store.index(indexName) // 索引對象.openCursor(IDBKeyRange.only(indexValue)); // 指針對象return new Promise((resolve, reject) => {request.onsuccess = function (e) {const cursor = e.target.result;if (cursor) {list.push(cursor.value);cursor.continue(); // 遍歷了存儲對象中的所有內容} else {resolve(list);}};request.onerror = function (ev) {reject(ev);};});
}

更新數據

function updateDB(db, storeName, data) {const request = db.transaction([storeName], "readwrite") // 事務對象.objectStore(storeName) // 倉庫對象.put(data);return new Promise((resolve, reject) => {request.onsuccess = function (ev) {resolve(ev);};request.onerror = function (ev) {resolve(ev);};});
}

刪除數據

function deleteDB(db, storeName, id) {const 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);};});
}

刪除數據庫

function deleteDBAll(dbName) {console.log(dbName);const deleteRequest = window.indexedDB.deleteDatabase(dbName);return new Promise((resolve, reject) => {deleteRequest.onerror = function (event) {console.log("刪除失敗");};deleteRequest.onsuccess = function (event) {console.log("刪除成功");};});
}

關閉數據庫

function closeDB(db) {db.close();console.log("數據庫已關閉");
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/162417.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162417.shtml
英文地址,請注明出處:http://en.pswp.cn/news/162417.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

educoder中Hive綜合應用案例 — 用戶搜索日志分析

第1關:2018年點擊量最高的10個網站域名 ---------- 禁止修改 ----------drop database if exists mydb cascade; ---------- 禁止修改 -------------------- begin ---------- ---創建mydb數據庫 create database mydb;---使用mydb數據庫 use mydb;---創建表db_search create…

CVE-2023-27524:Apache Superset未授權訪問漏洞復現

文章目錄 ?Apache Superset 未授權訪問漏洞(CVE-2023-27524)復現0x01 前言0x02 漏洞描述0x03 影響版本0x04 漏洞環境0x05 漏洞復現1.訪問漏洞環境2.漏洞復現 0x06 修復建議 ?Apache Superset 未授權訪問漏洞(CVE-2023-27524)復現 0x01 前言 免責聲明&#xff1a;請勿利用文…

在線工具收集

在線工具收集 1、在線P圖 https://www.photopea.com/ 一款類似于PS的在線摳圖軟件 ①去除圖片中的文字&#xff0c;并填充背景色 第一步&#xff1a;使用矩形選中要清除的文字 第二步&#xff1a;點擊編輯選擇填充 第三步&#xff1a;選擇內容識別&#xff0c;保留透明區域…

操作系統(七)| 設備管理-- 端口 驅動程序 基本I/O控制 磁盤I/O

文章目錄 1 設備管理概述1.1 系統總線結構1.2 設備控制器通用結構1.3 I/O設備的模型 2 I/O端口2.1 尋址方式 3 驅動程序4 基本I/O控制方式4.1 程序直接控制4.2 中斷I/O方式4.3 DMA方式4.4 I/O通道控制方式 5 I/O管理中的重要思想5.1 設備獨立性5.2 SPOOLing技術5.3 I/O軟件的多…

c語言 結構數組

為什么要使用結構數組&#xff1f; 例如有一種情況&#xff0c;我們需要存儲5名學生的數據。我們可以使用下面給出的結構來存儲它。 示例 #include<stdio.h> struct student { char name[20]; int id; float marks; }; void main() {struct student s1,s2,…

前端Date對象的使用錦集

Date 對象用于處理日期與時間。 創造對象 var d new Date(); var d new Date(milliseconds); // 參數為毫秒 var d new Date(dateString); var d new Date(year, month, day, hours, minutes, seconds, milliseconds);方法 getDate() 獲取當前日期對象是幾日(1-31) cons…

C++標準模板(STL)- 類型支持 (類型修改,添加 const 或/與 volatile 限定符到給定類型,std::add_cv)

類型特性 類型特性定義一個編譯時基于模板的結構&#xff0c;以查詢或修改類型的屬性。 試圖特化定義于 <type_traits> 頭文件的模板導致未定義行為&#xff0c;除了 std::common_type 可依照其所描述特化。 定義于<type_traits>頭文件的模板可以用不完整類型實例…

SAP的四種計量單位

在SAP中物料創建后&#xff0c;一旦發生業務&#xff0c;其基本計量單位便很難修改。由于單位無法滿足業務要求&#xff0c;往往會要求新建一個物料替代舊物料。這時候除了要將舊物料上所有的未清業務刪除外&#xff0c;還需要替換工藝與BOM中的舊物料。特別是當出現舊物料存在…

Linux學習筆記-Ubuntu下使用Crontab設置定時任務

文章目錄 一、概述二、基于crontab的設置2.1 基本命令說明2.2 使用-e指令編輯命令2.2.1 進入編輯模式2.2.2 指令信息格式2.2.4 開啟日志1) 修改rsyslog配置文件2) 重啟rsyslog3) 查看日志 2.2.3 設置后之后重啟服務 三、示例3.1 每隔一分鐘往文件中日期3.2 使用-l查看任務列表3…

越南服務器租用:企業在越南辦工廠的趨勢與當地(ERP/OA等)系統部署的重要性

近年來&#xff0c;越南逐漸成為全球企業布局的熱門目的地之一。許多企業紛紛選擇在越南設立工廠&#xff0c;以利用其低廉的勞動力成本和優越的地理位置。隨著企業在越南的擴張&#xff0c;對于當地部署ERP系統或OA系統等的需求也日益增長。在這種情況下&#xff0c;租用越南服…

上海亞商投顧:北證50指數持續大漲 短劇概念股再爆發

上海亞商投顧前言&#xff1a;無懼大盤漲跌&#xff0c;解密龍虎榜資金&#xff0c;跟蹤一線游資和機構資金動向&#xff0c;識別短期熱點和強勢個股。 一.市場情緒 滬指昨日震蕩調整&#xff0c;深成指跌超1.4%&#xff0c;創業板指跌超1.7%。北證50指數大漲超8%&#xff0c;…

ROS設置DHCP option121

配置時&#xff0c;了解格式很關鍵&#xff0c;16進制填寫格式如下&#xff1a; 將要訪問的IPV&#xff14;地址&#xff1a;192.168.100.0/24 192.168.30.254 轉換為&#xff1a;掩碼 目標網段 網關 0x18c0a864c0a81efe&#xff0c;0不用填寫 ROS配置如下圖&#xff1a; 抓…

02_使用API_String

StringBuilder StringBuilder 代表可變字符串對象&#xff0c;相對于是一個容器&#xff0c;它里面裝的字符串是可以改變的&#xff0c;就是用來操作字符串的好處&#xff1a;StringBuilder 比 String 更適合做字符串的修改操作&#xff0c;效率會更高&#xff0c;代碼也會更簡…

MacOS “xxxxx“,已損壞,無法打開,你應該將它移到廢紙簍

在這里插入圖片描述 解決方案 應用程序 - 實用工具中打開終端&#xff0c;輸入命令&#xff0c; sudo xattr -r -d com.apple.quarantine 然后將程序拖放至命令窗口&#xff0c;如下圖&#xff1a;

22. Spring源碼篇之推斷構造方法

簡介 很多時候我們的構造器都不止一個&#xff0c;那么spring怎么選擇的呢&#xff0c;簽名介紹了推斷構造方法的擴展點&#xff0c;可以使用Autowired注解去選擇使用哪個構造器&#xff0c;但是即使這樣也有可能有多個Autowired且required為false的構造器&#xff0c;那么還是…

QLineEdit響應editingFinished實現只響應一次

QLineEdit中editingFinished槽函數會在按下enter時響應兩次&#xff0c;分別是按下enter和失去焦點的時候&#xff0c;為了能讓 QLineEdit只響應其中一次&#xff0c;需定義一個全局變量m_bFlagEnter保存是否enter是否按下&#xff0c;按下后&#xff0c;則在失去焦點的時候做對…

Unity發布IOS后,使用xcode打包報錯:MapFileParser.sh:Permissiondenied

1.錯誤提示 使用xcode打包錯誤提示&#xff1a;/Users/mymac/Desktop/myproject/MapFileParser.sh: Permission denied 2.解決方案 打開控制臺輸入&#xff1a;chmod ax /Users/mymac/Desktop/myproject/MapFileParser.sh。按回車鍵執行&#xff0c;然后重新使用xcode發布程序…

【開源】基于JAVA的在線課程教學系統

項目編號&#xff1a; S 014 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S014&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S014&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 系統介紹1.2 項目錄屏 二、研究內容2.1 課程類型管理模塊2.2 課程管理模塊2…

機器學習之數據清洗和預處理

目錄 Box_Cox Box_Cox Box-Cox變換是一種用于數據預處理和清洗的方法&#xff0c;旨在使數據更符合統計模型的假設&#xff0c;特別是對于線性回歸模型。這種變換通過調整數據的尺度和形狀&#xff0c;使其更加正態分布。 Box-Cox變換的定義是: y ( λ ) { y λ ? 1 λ , i…

【深度學習】卷積神經網絡(CNN)

一、引子————邊界檢測 我們來看一個最簡單的例子&#xff1a;“邊界檢測&#xff08;edge detection&#xff09;”&#xff0c;假設我們有這樣的一張圖片&#xff0c;大小88&#xff1a; 圖片中的數字代表該位置的像素值&#xff0c;我們知道&#xff0c;像素值越大&#…