浏览器数据库IndexedDB的使用

以下代码复制粘贴直接运行即可

js 复制代码
<!DOCTYPE html>
<html>

<head>
  <title>IndexedDB Example</title>
</head>

<body>
  <h1>IndexedDB Example</h1>
  <!-- 创建数据库按钮 -->
  <button onclick="initializeAndCreateDatabase()">Create Database</button>
  <!-- 添加数据按钮 -->
  <button onclick="addData()">Add Data</button>
  <!-- 读取数据按钮 -->
  <button onclick="readData()">Read Data</button>
  <!-- 更新数据按钮 -->
  <button onclick="updateData()">Update Data</button>
  <!-- 删除数据按钮 -->
  <button onclick="deleteData()">Delete Data</button>
  <script>
    let db

    // 打开数据库或创建新数据库
    function openDatabase () {
      return new Promise((resolve, reject) => {
        // 尝试打开名为 "MyDatabase" 版本号为 1 的数据库
        const request = window.indexedDB.open("MyDatabase", 1)
        request.onerror = function (event) {
          reject(event.target.errorCode)
        }
        request.onsuccess = function (event) {
          // 成功打开数据库
          resolve(event.target.result)
        }
        request.onupgradeneeded = function (event) {
          // 数据库需要升级时执行,创建对象存储空间和索引
          const db = event.target.result
          const objectStore = db.createObjectStore("MyObjectStore", { keyPath: "id", autoIncrement: true })
          // 创建一个名为 "name" 的索引,不要求唯一
          objectStore.createIndex("name", "name", { unique: false })
          resolve(db)
        }
      })
    }

    // 初始化并创建数据库
    async function initializeAndCreateDatabase () {
      // 异步打开数据库
      db = await openDatabase()
      console.log("Database opened successfully.")
    }

    // 添加数据
    async function addData () {
      if (!db) {
        await initializeAndCreateDatabase()
      }
      const transaction = db.transaction(["MyObjectStore"], "readwrite")
      const objectStore = transaction.objectStore("MyObjectStore")
      const newData = { name: "John Doe" }
      const request = objectStore.add(newData)
      request.onsuccess = function (event) {
        // 数据成功添加
        console.log("Data added to the database.")
      }
      request.onerror = function (event) {
        console.error("Error adding data: " + event.target.error)
      }
    }

    // 读取数据
    async function readData () {
      if (!db) {
        await initializeAndCreateDatabase()
      }
      const transaction = db.transaction(["MyObjectStore"], "readonly")
      const objectStore = transaction.objectStore("MyObjectStore")
      const request = objectStore.openCursor()
      request.onsuccess = function (event) {
        const cursor = event.target.result
        if (cursor) {
          console.log("ID: " + cursor.value.id + ", Name: " + cursor.value.name)
          cursor.continue()
        } else {
          console.log("No more data.")
        }
      }
    }

    // 更新数据
    async function updateData () {
      if (!db) {
        await initializeAndCreateDatabase()
      }

      const transaction = db.transaction(["MyObjectStore"], "readwrite")
      const objectStore = transaction.objectStore("MyObjectStore")
      const request = objectStore.put({ id: 1, name: "Updated Name" })

      request.onsuccess = function (event) {
        // 数据成功更新
        console.log("Data updated.")
      }
      request.onerror = function (event) {
        console.error("Error updating data: " + event.target.error)
      }
    }

    // 删除数据
    async function deleteData () {
      if (!db) {
        await initializeAndCreateDatabase()
      }
      const transaction = db.transaction(["MyObjectStore"], "readwrite")
      const objectStore = transaction.objectStore("MyObjectStore")
      const request = objectStore.delete(1)
      request.onsuccess = function (event) {
        // 数据成功删除
        console.log("Data deleted.")
      }
      request.onerror = function (event) {
        console.error("Error deleting data: " + event.target.error)
      }
    }
  </script>
</body>

</html>
相关推荐
caimouse11 小时前
ReactOS 窗口系统分析(23):键盘 — keyboard.c + kbdlayout.c
c语言·开发语言·计算机外设
Emily1568535987011 小时前
Emerson 1C31129G03 Analog Input Module
java·开发语言·前端·plc·emerson·1c31129g03·input module
就叫_这个吧16 小时前
Java递归方法实现面包屑导航
java·开发语言
fīɡЙtīиɡ ℡16 小时前
AI 应用系统设计
java·开发语言·人工智能
城管不管16 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
倔强的石头10616 小时前
向量数据库从相似度检索走向融合数据底座
数据库
今天AI了吗18 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
kyriewen18 小时前
我把最常踩的8个CORS跨域报错整理了一遍——第8个去年还不存在
前端·javascript
TELL52118 小时前
selenium webdriver 第二次初始化的异常
开发语言·python