Home Web Front-end JS Tutorial How to use IndexedDB? Guide on complete CRUD Operations

How to use IndexedDB? Guide on complete CRUD Operations

Nov 21, 2024 pm 12:48 PM

How to use IndexedDB? Guide on complete CRUD Operations

A Comprehensive Guide to IndexedDB: The Browser's Powerhouse for Client-Side Storage

As web applications become more sophisticated, the need for efficient client-side storage solutions has grown. IndexedDB, a low-level API for storing large amounts of structured data, is a powerful tool for web developers, software engineers, and web enthusiasts looking to create robust and offline-capable applications.

In this blog, we'll explore what IndexedDB is, how it works, and how to use it effectively with practical examples. Whether you're building a Progressive Web App (PWA), a complex dashboard, or a game, IndexedDB can help you manage data seamlessly.


What is IndexedDB?

IndexedDB is a browser-based NoSQL database designed for storing large amounts of structured data, including files and blobs. Unlike cookies or localStorage, IndexedDB allows you to store data in a structured format and query it using indexes, making it ideal for complex use cases.

Key Features of IndexedDB:

  • Asynchronous Operations: Interactions with IndexedDB are non-blocking, ensuring smooth performance.
  • Structured Data Storage: Stores data in key-value pairs, enabling efficient querying with indexes.
  • Offline Capability: Data is stored locally, making it accessible without an internet connection.
  • Large Storage Limit: Offers more storage capacity compared to cookies or localStorage.

Use Cases for IndexedDB:

  • Progressive Web Apps: Store offline data for seamless experiences.
  • Large Data Storage: Save large datasets, such as user preferences or application state.
  • Caching: Cache API responses for improved performance.

Getting Started with IndexedDB

How Does IndexedDB Work?

IndexedDB operates on a database structure consisting of:

  • Databases: Top-level containers for data.
  • Object Stores: Tables where data is stored, each identified by a unique name.
  • Indexes: Structures that optimize querying within object stores.

IndexedDB API: Basic Operations

The main operations in IndexedDB include:

  1. Opening a Database: Creating or accessing a database.
  2. Creating Object Stores: Defining storage for your data.
  3. Performing CRUD Operations: Adding, reading, updating, and deleting data.
  4. Using Transactions: Managing data operations atomically.

Example 1: Creating and Opening a Database

Here's how to create an IndexedDB database called MyDatabase with an object store users.

const dbName = "MyDatabase";
const dbVersion = 1; // Versioning is required for schema updates.

const request = indexedDB.open(dbName, dbVersion);

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

  // Create an object store named 'users' with 'id' as the keyPath
  if (!db.objectStoreNames.contains("users")) {
    db.createObjectStore("users", { keyPath: "id" });
  }
  console.log("Database setup complete");
};

request.onsuccess = function (event) {
  const db = event.target.result;
  console.log("Database opened successfully");
};

request.onerror = function (event) {
  console.error("Error opening database:", event.target.errorCode);
};
Copy after login

Explanation:

  • The indexedDB.open method opens or creates the database.

  • The onupgradeneeded event is triggered when creating a new database or upgrading its version.

  • An object store named users is created with id as the primary key.


Example 2: Adding Data to the Object Store

You can add data to an object store using a transaction.

function addUser(id, name, email) {
  const request = indexedDB.open("MyDatabase", 1);

  request.onsuccess = function (event) {
    const db = event.target.result;
    const transaction = db.transaction("users", "readwrite");
    const objectStore = transaction.objectStore("users");

    const user = { id, name, email };
    const addRequest = objectStore.add(user);

    addRequest.onsuccess = function () {
      console.log("User added:", user);
    };

    addRequest.onerror = function (event) {
      console.error("Error adding user:", event.target.errorCode);
    };
  };
}

// Add a new user
addUser(1, "John Doe", "john.doe@example.com");
Copy after login

Explanation:

  • A transaction is created with the readwrite mode to modify data.

  • The add method inserts data into the users object store.


Example 3: Reading Data from the Object Store

Retrieve data by using the get method or iterate over all entries.

function getUser(id) {
  const request = indexedDB.open("MyDatabase", 1);

  request.onsuccess = function (event) {
    const db = event.target.result;
    const transaction = db.transaction("users", "readonly");
    const objectStore = transaction.objectStore("users");

    const getRequest = objectStore.get(id);

    getRequest.onsuccess = function () {
      if (getRequest.result) {
        console.log("User found:", getRequest.result);
      } else {
        console.log("User not found");
      }
    };

    getRequest.onerror = function (event) {
      console.error("Error retrieving user:", event.target.errorCode);
    };
  };
}

// Get user with ID 1
getUser(1);
Copy after login

Explanation:

  • The get method fetches a specific record by its key.

  • Data retrieval is asynchronous, so success and error handlers are used.


Example 4: Updating Data in IndexedDB

Update existing records using the put method.

function updateUser(id, updatedData) {
  const request = indexedDB.open("MyDatabase", 1);

  request.onsuccess = function (event) {
    const db = event.target.result;
    const transaction = db.transaction("users", "readwrite");
    const objectStore = transaction.objectStore("users");

    const putRequest = objectStore.put({ ...updatedData, id });

    putRequest.onsuccess = function () {
      console.log("User updated:", { ...updatedData, id });
    };

    putRequest.onerror = function (event) {
      console.error("Error updating user:", event.target.errorCode);
    };
  };
}

// Update user with ID 1
updateUser(1, { name: "Johnathan Doe", email: "johnathan.doe@example.com" });
Copy after login

Example 5: Deleting Data in IndexedDB

Remove a record using the delete method.

function deleteUser(id) {
  const request = indexedDB.open("MyDatabase", 1);

  request.onsuccess = function (event) {
    const db = event.target.result;
    const transaction = db.transaction("users", "readwrite");
    const objectStore = transaction.objectStore("users");

    const deleteRequest = objectStore.delete(id);

    deleteRequest.onsuccess = function () {
      console.log("User deleted with ID:", id);
    };

    deleteRequest.onerror = function (event) {
      console.error("Error deleting user:", event.target.errorCode);
    };
  };
}

// Delete user with ID 1
deleteUser(1);
Copy after login

IndexedDB vs Other Storage Solutions

Feature IndexedDB localStorage sessionStorage
Storage Limit Several MB to GB 5 MB (approx) 5 MB (approx)
Data Format Key-value pairs Key-value pairs Key-value pairs
Asynchronous Yes No No
Structured Data Yes No No

Best Practices for Using IndexedDB

  • Use Transactions Properly: Always manage data operations within transactions to ensure atomicity.

  • Handle Errors Gracefully: Implement error handlers for better debugging and user feedback.

  • Version Control: Increment the database version carefully to manage schema changes.

  • Test Offline Scenarios: IndexedDB is often used for offline capabilities; ensure it functions as expected without an internet connection.


Conclusion

IndexedDB is a powerful tool for client-side data storage, offering features that far surpass traditional storage methods like localStorage. With support for structured data, large storage capacity, and offline functionality, IndexedDB is an essential technology for building modern web applications.

Key Takeaways:

  • IndexedDB is ideal for storing large and complex datasets locally.

  • Transactions are central to managing data operations in IndexedDB.

  • It provides robust offline support, making it a cornerstone of Progressive Web Apps.

By mastering IndexedDB, you can build scalable, offline-first applications with superior performance and user experience. Start experimenting with IndexedDB in your projects today!

The above is the detailed content of How to use IndexedDB? Guide on complete CRUD Operations. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What should I do if I encounter garbled code printing for front-end thermal paper receipts? What should I do if I encounter garbled code printing for front-end thermal paper receipts? Apr 04, 2025 pm 02:42 PM

Frequently Asked Questions and Solutions for Front-end Thermal Paper Ticket Printing In Front-end Development, Ticket Printing is a common requirement. However, many developers are implementing...

Demystifying JavaScript: What It Does and Why It Matters Demystifying JavaScript: What It Does and Why It Matters Apr 09, 2025 am 12:07 AM

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.

Who gets paid more Python or JavaScript? Who gets paid more Python or JavaScript? Apr 04, 2025 am 12:09 AM

There is no absolute salary for Python and JavaScript developers, depending on skills and industry needs. 1. Python may be paid more in data science and machine learning. 2. JavaScript has great demand in front-end and full-stack development, and its salary is also considerable. 3. Influencing factors include experience, geographical location, company size and specific skills.

How to achieve parallax scrolling and element animation effects, like Shiseido's official website?
or:
How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? How to achieve parallax scrolling and element animation effects, like Shiseido's official website? or: How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? Apr 04, 2025 pm 05:36 PM

Discussion on the realization of parallax scrolling and element animation effects in this article will explore how to achieve similar to Shiseido official website (https://www.shiseido.co.jp/sb/wonderland/)...

Is JavaScript hard to learn? Is JavaScript hard to learn? Apr 03, 2025 am 12:20 AM

Learning JavaScript is not difficult, but it is challenging. 1) Understand basic concepts such as variables, data types, functions, etc. 2) Master asynchronous programming and implement it through event loops. 3) Use DOM operations and Promise to handle asynchronous requests. 4) Avoid common mistakes and use debugging techniques. 5) Optimize performance and follow best practices.

The Evolution of JavaScript: Current Trends and Future Prospects The Evolution of JavaScript: Current Trends and Future Prospects Apr 10, 2025 am 09:33 AM

The latest trends in JavaScript include the rise of TypeScript, the popularity of modern frameworks and libraries, and the application of WebAssembly. Future prospects cover more powerful type systems, the development of server-side JavaScript, the expansion of artificial intelligence and machine learning, and the potential of IoT and edge computing.

How to merge array elements with the same ID into one object using JavaScript? How to merge array elements with the same ID into one object using JavaScript? Apr 04, 2025 pm 05:09 PM

How to merge array elements with the same ID into one object in JavaScript? When processing data, we often encounter the need to have the same ID...

Zustand asynchronous operation: How to ensure the latest state obtained by useStore? Zustand asynchronous operation: How to ensure the latest state obtained by useStore? Apr 04, 2025 pm 02:09 PM

Data update problems in zustand asynchronous operations. When using the zustand state management library, you often encounter the problem of data updates that cause asynchronous operations to be untimely. �...

See all articles