浏览器数据库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>
相关推荐
white-persist5 分钟前
XXE 注入漏洞全解析:从原理到实战
开发语言·前端·网络·安全·web安全·网络安全·信息可视化
阿巴~阿巴~24 分钟前
Centos 7/8 安装 Redis
linux·服务器·数据库·redis·centos
刘大猫.26 分钟前
mysql数据库压缩
数据库·mysql·压缩·mysql数据库压缩·数据库压缩·数据库备份与压缩
oracle040630 分钟前
sql练习题单-知识点总结
数据库·sql
会飞的架狗师31 分钟前
【MySQL体系】第4篇:MySQL 查询优化实用技巧
数据库·mysql
人生导师yxc35 分钟前
Java中Mock的写法
java·开发语言
半路程序员43 分钟前
Go语言学习(四)
开发语言·学习·golang
lypzcgf1 小时前
Coze源码分析-资源库-编辑数据库-前端源码-核心组件
前端·数据库·源码分析·coze·coze源码分析·ai应用平台·agent平台
沐知全栈开发1 小时前
C# 枚举(Enum)
开发语言
秦禹辰1 小时前
轻量级开源文件共享系统PicoShare本地部署并实现公网环境文件共享
开发语言·后端·golang