IndexedDB-增增删改查示例

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: IndexedDB-增增删改查示例

1. 增加数据

// 打开数据库
const dbName = 'myDatabase';
const request = indexedDB.open(dbName, 1);

// 数据库被新建或升级时创建对象存储空间
request.onupgradeneeded = event => {
  const db = event.target.result;
  const objectStore = db.createObjectStore('customers', { keyPath: 'id' });
  objectStore.createIndex('name', 'name', { unique: false });
  objectStore.createIndex('email', 'email', { unique: true });
};

// 成功打开数据库
request.onsuccess = event => {
  const db = event.target.result;

  // 添加数据到对象存储空间
  const transaction = db.transaction(['customers'], 'readwrite');
  const objectStore = transaction.objectStore('customers');
  
  objectStore.add({ id: 1, name: 'Alice', email: 'alice@example.com' });
  objectStore.add({ id: 2, name: 'Bob', email: 'bob@example.com' });
  
  transaction.oncomplete = () => {
    console.log('Data added successfully');
  };

// 打开数据库失败
request.onerror = event => {
  console.log('Error opening database', event.target.error);
};

2. 修改数据

// 打开数据库
const request = window.indexedDB.open('myDatabase', 1);

request.onerror = function(event) {
  console.log('打开数据库失败');
};

request.onsuccess = function(event) {
  const db = event.target.result;

  // 创建事务并获取数据存储对象
  const transaction = db.transaction(['dataStore'], 'readwrite');
  const objectStore = transaction.objectStore('dataStore');

  // 指定要修改的键值(假设你想修改 title 为 '测试1' 的数据)
  const key = '测试1';

  // 使用 get 方法获取要修改的数据
  const getRequest = objectStore.get(key);

  getRequest.onsuccess = function(event) {
    const data = event.target.result;

    // 修改数据(假设你想修改 content 字段)
    data.content = '这是修改后的内容';

    // 使用 put 方法将修改后的数据写回数据库
    const putRequest = objectStore.put(data);

    putRequest.onsuccess = function(event) {
      console.log('数据修改成功');
    };

    putRequest.onerror = function(event) {
      console.log('数据修改失败');
    };
  };

  getRequest.onerror = function(event) {
    console.log('获取数据失败');
  };

  transaction.oncomplete = function(event) {
    console.log('事务完成');
    db.close();
  };

  transaction.onerror = function(event) {
    console.log('事务出错');
  };
};

request.onupgradeneeded = function(event) {
  const db = event.target.result;

  // 创建对象存储空间
  const objectStore = db.createObjectStore('dataStore', { keyPath: 'title' });

  // 可以在这里添加索引等其他设置
};

3.修改数据

// 打开数据库
const request = window.indexedDB.open('myDatabase', 1);

request.onerror = function(event) {
  console.log('打开数据库失败');
};

request.onsuccess = function(event) {
  const db = event.target.result;

  // 创建事务并获取数据存储对象
  const transaction = db.transaction(['dataStore'], 'readwrite');
  const objectStore = transaction.objectStore('dataStore');

  // 指定要修改的键值(假设你想修改 title 为 '测试1' 的数据)
  const key = '测试1';

  // 使用 get 方法获取要修改的数据
  const getRequest = objectStore.get(key);

  getRequest.onsuccess = function(event) {
    const data = event.target.result;

    // 修改数据(假设你想修改 content 字段)
    data.content = '这是修改后的内容';

    // 使用 put 方法将修改后的数据写回数据库
    const putRequest = objectStore.put(data);

    putRequest.onsuccess = function(event) {
      console.log('数据修改成功');
    };

    putRequest.onerror = function(event) {
      console.log('数据修改失败');
    };
  };

  getRequest.onerror = function(event) {
    console.log('获取数据失败');
  };

  transaction.oncomplete = function(event) {
    console.log('事务完成');
    db.close();
  };

  transaction.onerror = function(event) {
    console.log('事务出错');
  };
};

request.onupgradeneeded = function(event) {
  const db = event.target.result;

  // 创建对象存储空间
  const objectStore = db.createObjectStore('dataStore', { keyPath: 'title' });

  // 可以在这里添加索引等其他设置
};

4. 查询数据

// 打开数据库
const dbName = 'myDatabase';
const request = indexedDB.open(dbName, 1);

// 数据库被新建或升级时创建对象存储空间
request.onupgradeneeded = event => {
  const db = event.target.result;
  const objectStore = db.createObjectStore('customers', { keyPath: 'id' });
  objectStore.createIndex('name', 'name', { unique: false });
  objectStore.createIndex('email', 'email', { unique: true });
};

// 成功打开数据库
request.onsuccess = event => {
  const db = event.target.result;

  // 获取数据
  const transaction = db.transaction(['customers'], 'readonly');
  const objectStore = transaction.objectStore('customers');

  // 获取所有数据
  const getAllRequest = objectStore.getAll();
  getAllRequest.onsuccess = () => {
    console.log(getAllRequest.result);
  };

  // 通过主键获取数据
  const getRequest = objectStore.get(1);
  getRequest.onsuccess = () => {
    console.log(getRequest.result);
  };

  // 通过索引获取数据
  const index = objectStore.index('email');
  const getEmailRequest = index.get('bob@example.com');
  getEmailRequest.onsuccess = () => {
    console.log(getEmailRequest.result);
  };
  
    // const index = objectStore.index("introduce");
    // const getEmailRequest = index.openCursor(IDBKeyRange.only("暂无介绍"));
    // getEmailRequest.onsuccess = () => {
    //   const cursor = getEmailRequest.result;
    //   if (cursor) {
    //     console.log(cursor.value);
    //     cursor.continue();
    //   }
    // };

  transaction.oncomplete = () => {
    console.log('Data retrieval completed');
    db.close();
  };
};

// 打开数据库失败
request.onerror = event => {
  console.log('Error opening database', event.target.error);
};
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
前端开发 Java 关系型数据库
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
545 0
|
XML Java 数据库连接
Mybatis 批量将list数据插入到数据库竟然这样处理
Mybatis 批量将list数据插入到数据库竟然这样处理
362 0
|
1月前
|
SQL Java 数据库
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
这篇文章是关于如何使用Django框架的ORM系统在视图(views)层面进行数据库的增、删、改、查操作的教程。
18 0
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
|
6月前
|
SQL 关系型数据库 MySQL
『 MySQL数据库 』CRUD之UD,表的数据更新(修改)及删除
『 MySQL数据库 』CRUD之UD,表的数据更新(修改)及删除
|
6月前
|
关系型数据库 MySQL 数据处理
『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(下)
『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(下)
|
6月前
|
关系型数据库 MySQL 数据库
『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(上)
『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(上)
|
6月前
|
SQL 前端开发 关系型数据库
MYSQL基础知识之【修改数据,删除数据】
MYSQL基础知识之【修改数据,删除数据】
74 1
|
6月前
|
数据库
数据“库”的增删改查
数据库的增删改查,友友们知道怎么操作吗?小编整理了一些,供大家参考。 创建数据库:
CRUD操作
CRUD操作
58 0
|
数据库 C++
QxOrm的使用-数据操作--增删改查
上一篇我们讲了QxOrm的基本的数据映射操作,这里面再补充一点东西
871 0