前端 浏览器 IndexDB

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta content="width=device-width, initial-scale=1.0" name="viewport">
  <meta content="ie=edge" http-equiv="X-UA-Compatible">
  <title>Document</title>
</head>

<body></body>

</html>
<script>
  // 默认打开的数据库版本为1,我写成1.0就会触发onupgradeneeded事件   
  let request = window.indexedDB.open('index9_test', '1.0');
  let db = null;
  request.onerror = function (event) {
    console.log(new Error(event));
  };
  request.onsuccess = function (event) {
    db = request.result;
    console.log('打开数据库成功:' + event);
    if (db.objectStoreNames.contains('person')) {
      // read(db)     
      // readAll(db)    
      // update(db)   
      // remove(db)      
      findWithIdx(db);
    } else {
      add(db);
    }
  };
  // 如果指定的版本号,大于数据库的实际版本号   
  request.onupgradeneeded = function (event) {
    db = event.target.result;
    console.log('数据库版本升级:' + event);
    let objectStore = null;
    if (!db.objectStoreNames.contains('person')) {
      // autoIncrement: true 自动生成主键, keyPath自定义主键     
      objectStore = db.createObjectStore('person', { keyPath: 'id' });
      // objectStore.createIndex(索引名称, 索引所在的属性, 配置对象{ unique: false 说明该属性是否包含重复的值 })
      objectStore.createIndex('name', 'name', { unique: false });
      objectStore.createIndex('age', 'age', { unique: true });
      objectStore.createIndex('email', 'email', { unique: true });
      console.log(objectStore);
    }
  };

  function add(db) {
    console.log(db);
    // transaction新建事务,新建事务时必须指定是只读还是读写     
    // 通过IDBTransaction.objectStore(name)方法,拿到 IDBObjectStore 对象    
    // 通过表格对象的add()方法,向表格写入一条记录,写入是异步操作,需要监听success和error事件   
    let request = db.transaction(['person'], 'readwrite').objectStore('person').add({
      id: 1,
      name: '张三',
      age: 24,
      email: 'zhangsan@example.com'
    });
    request.onsuccess = function (event) {
      console.log('数据写入成功');
      read();
    };
    request.onerror = function (event) {
      console.log(new Error(event));
    };
  }

  function read() {
    // 读取数据也是通过事务完成     
    var transaction = db.transaction(['person']);
    var objectStore = transaction.objectStore('person');
    var request = objectStore.get(1);
    request.onerror = function (event) {
      console.log('事务失败');
    };
    request.onsuccess = function (event) {
      if (request.result) {
        console.log('Name: ' + request.result.name);
        console.log('Age: ' + request.result.age);
        console.log('Email: ' + request.result.email);
      } else {
        console.log('未获得数据记录');
      }
    };
  }

  function readAll(db) {
    let objectStore = db.transaction('person').objectStore('person');
    // 新建指针对象的openCursor()方法是一个异步操作,所以要监听success事件    
    objectStore.openCursor().onsuccess = function (event) {
      let cursor = event.target.result;
      if (cursor) {
        console.log('Id: ' + cursor.key);
        console.log('Name: ' + cursor.value.name);
        console.log('Age: ' + cursor.value.age);
        console.log('Email: ' + cursor.value.email);
        cursor.continue();
      } else {
        console.log('没有更多数据了!');
      }
    };
  }

  function update(db) {
    // 更新数据要使用IDBObject.put()方法   
    var request = db.transaction(['person'], 'readwrite').objectStore('person').put({
      id: 1,
      name: '李四',
      age: 35,
      email: 'lisi@example.com'
    });
    request.onsuccess = function (event) {
      console.log('数据更新成功');
      read(db);
    };
    request.onerror = function (event) {
      console.log('数据更新失败');
    };
  }

  function remove(db) {
    // IDBObjectStore.delete()方法用于删除记录     
    var request = db.transaction(['person'], 'readwrite').objectStore('person').delete(1);
    request.onsuccess = function (event) {
      console.log('数据删除成功');
      read(db);
    };
  }

  function findWithIdx(db) {
    // 根据索引查找   
    let transaction = db.transaction(['person'], 'readonly');
    let store = transaction.objectStore('person');
    let index = store.index('name');
    let request = index.get('李四');
    request.onsuccess = function (e) {
      var result = e.target.result;
      if (result) {
        console.log(result);
      } else {
        console.log('error:', result);
      }
    };
  }
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要向浏览器IndexedDB 存储数据,可以使用以下步骤: 1. 打开 IndexedDB 数据库:使用 `window.indexedDB.open()` 方法打开一个数据库,如果数据库不存在,则会创建一个新的数据库。例如: ```javascript let request = window.indexedDB.open('myDatabase', 1); ``` 2. 创建对象存储空间:使用 `IDBDatabase.createObjectStore()` 方法创建一个对象存储空间,可以在其中存储数据。例如: ```javascript request.onupgradeneeded = function(event) { let db = event.target.result; let objectStore = db.createObjectStore('myObjectStore', { keyPath: 'id' }); objectStore.createIndex('name', 'name', { unique: false }); }; ``` 3. 存储数据:使用 `IDBObjectStore.put()` 方法向对象存储空间中存储数据。例如: ```javascript let transaction = db.transaction(['myObjectStore'], 'readwrite'); let objectStore = transaction.objectStore('myObjectStore'); let data = { id: 1, name: 'John Doe', age: 30 }; let request = objectStore.put(data); ``` 要从 IndexedDB获取数据,可以使用以下步骤: 1. 打开 IndexedDB 数据库:同样使用 `window.indexedDB.open()` 方法打开数据库。例如: ```javascript let request = window.indexedDB.open('myDatabase', 1); ``` 2. 获取对象存储空间:使用 `IDBTransaction.objectStore()` 方法获取对象存储空间。例如: ```javascript let transaction = db.transaction(['myObjectStore'], 'readonly'); let objectStore = transaction.objectStore('myObjectStore'); ``` 3. 获取数据:使用 `IDBObjectStore.get()` 方法从对象存储空间中获取数据。例如: ```javascript let request = objectStore.get(1); request.onsuccess = function(event) { let data = event.target.result; console.log(data); }; ``` 以上就是向 IndexedDB 存储数据获取数据的基本步骤。需要注意的是,IndexedDB 是异步的,需要使用回调函数来处理操作结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值