📜  索引数据库 |介绍

📅  最后修改于: 2022-05-13 01:56:52.776000             🧑  作者: Mango

索引数据库 |介绍

IndexedDB 是浏览器中的键值数据库。它是一个 NoSQL 数据库。它是事务性的,即如果特定操作属于事务,则不会应用该事务的任何操作。这可确保数据库保持一致。

索引数据库

数据库内部

为什么要使用 IndexedDB?

  1. localStorage 专为少量数据而设计,只能存储键和值的字符串数据,而 IndexedDB 可以处理大量非结构化数据,包括文件/Blob。
  2. 它类似于 JavaScript 对象,它也可以具有嵌套的对象和属性。
  3. 它可以异步访问,它可以与服务工作者一起使用,这有助于离线存储数据,一旦设备获得互联网访问权限,它就会将其同步到服务器。

使用 IndexedDB: JavaScript 用于访问 IndexedDB。

  1. 打开数据库 –
    // Syntax
    let request = indexedDB.open(name, version);
    // name : database name, string value
    // version : version number, by default 1, positive integer
    

    打开数据库的代码应该检查数据库是否存在。

    let request = indexedDB.open("gfg", 1);
      
     request.onupgradeneeded = function() {
      // Initialize new database
     };
      
    request.onerror = function() {
      console.error("Unable to access database", request.error);
      // Logs error to the console
    };
      
    request.onsuccess = function() {
      let db = request.result;
      // Use existing database
    };
    
  2. 在数据库中创建对象存储 –
    // Syntax
    let objectStore = db.createObjectStore(name, [keyOption]);
    // name : object store name
    // keyOption : object property key
    
    let request = indexedDB.open("gfg", 1);
      
    // Check if object store exists and
    // then creates it
    request.onupgradeneeded = function() {
      let db = request.result;
      if (!db.objectStoreNames.contains('articles')) { 
        db.createObjectStore('articles', {keyPath: 'id'});  
      }
    };
    
  3. 开始交易——
    // Syntax
    db.transaction(objectStore, type]);
    // objectStore : objectStore which is to be used
    // type : readonly or readwrite
    
    let transaction = db.transaction("articles", "readwrite");
      
    // Access an object store
    let articles = transaction.objectStore("articles");
      
    // Create an object
    let article = {
      id: 'Array',
      topic : 'Introduction to Array'
    };
      
    // Add an object 
    let request = articles.add(article);
      
    // Success
    request.onsuccess = function() {
      console.log("Article Published", request.result);
    };
      
    // Failed
    request.onerror = function() {
      console.log("Article Publish failed", request.error);
    };
    
  4. 关闭交易
    let transaction = db.transaction("books", "readwrite");
      
    // Conducting operations in the transaction
      
    // When transaction is over
    transaction.oncomplete = function() {
      console.log("Transaction is complete");
    };
    

    我们可以通过 transaction.abort() 方法强制中止事务。

索引数据库的使用

IndexedDB 的使用和实现很简单。这就是您可以通过 JavaScript 在代码中使用 IndexedDB 的方式。