IndexedDB выборка результатов

IndexedDB — это мощная технология, позволяющая хранить и доступно извлекать большие объемы структурированных данных непосредственно в браузере. Она предоставляет разработчикам инструменты для создания кэшей приложений и оффлайн-хранилищ для веб-сайтов, что весьма полезно в ситуациях с недоступностью интернета или медленными соединениями.

Основная идея IndexedDB заключается в создании базы данных с объектными хранилищами (object stores) и индексами (indexes), которые позволяют эффективно организовывать и извлекать данные. Однако, для того чтобы корректно работать с данными в IndexedDB, необходимо знать основные методы, которые предоставляет эта технология.

В этой статье рассмотрим основные методы для работы с данными в IndexedDB: от создания объектного хранилища и добавления данных, до извлечения и удаления записей. Кроме того, мы рассмотрим примеры использования каждого метода, чтобы вы могли легче разобраться в процессе работы с IndexedDB.

Основные методы работы с IndexedDB

Открытие базы данных:

Для начала работы с IndexedDB необходимо открыть базу данных с помощью метода indexedDB.open(). Он принимает два аргумента: название базы данных и ее версию. Если базы данных с указанным названием не существует, она будет создана. Если база данных существует, но ее версия отличается от указанной, будет выполнена функция обновления.

Создание хранилища объектов:

После успешного открытия базы данных необходимо создать хранилище объектов с помощью метода createObjectStore(). Он принимает два аргумента: название хранилища и дополнительные параметры, такие как уникальность ключа или автоматическая генерация ключа.

Добавление данных:

Для добавления данных в хранилище объектов используется метод add(). Он принимает два аргумента: объект данных и ключ. Если ключ не указан или равен null, будет сгенерирован новый уникальный ключ.

Чтение данных:

Для чтения данных из хранилища объектов используется метод get(). Он принимает один аргумент — ключ, по которому производится поиск данных. Метод возвращает объект данных, соответствующий указанному ключу.

Обновление данных:

Для обновления данных в хранилище объектов используется метод put(). Он принимает два аргумента: объект данных и ключ. Если ключ не указан или равен null, будет сгенерирован новый уникальный ключ. Если ключ уже существует, соответствующий объект данных будет обновлен.

Удаление данных:

Для удаления данных из хранилища объектов используется метод delete(). Он принимает один аргумент — ключ, по которому производится поиск данных. Метод удаляет объект данных, соответствующий указанному ключу.

Закрытие базы данных:

После завершения работы с базой данных необходимо закрыть ее с помощью метода close(). Это позволит освободить ресурсы и предотвратить возможные утечки памяти.

Используя эти основные методы работы с IndexedDB, вы сможете эффективно управлять данными в веб-приложениях и создавать мощные клиентские базы данных.

Создание базы данных в IndexedDB

Создание базы данных в IndexedDB включает в себя следующие основные шаги:

  1. Открытие базы данных: При помощи метода open необходимо открыть соединение с базой данных. Этот метод принимает название базы данных и версию базы данных (число). Если база данных не существует, она будет создана.
  2. Создание хранилища объектов: Внутри базы данных необходимо создать хранилище объектов, в котором будут храниться данные. Хранилище можно создать с помощью метода createObjectStore, указав название хранилища.
  3. Определение структуры данных: Внутри хранилища объектов можно определить структуру данных, создав индексы или уникальные ключи для полей объектов.
  4. Закрытие базы данных: По окончании работы с базой данных ее необходимо закрыть с помощью метода close.

Пример кода создания базы данных в IndexedDB:

// Открытие базы данных
let request = indexedDB.open('myDatabase', 1);
request.onerror = function(event) {
console.log("Не удалось открыть базу данных");
};
request.onsuccess = function(event) {
let db = event.target.result;
console.log("База данных успешно открыта");
// Закрытие базы данных
db.close();
};
request.onupgradeneeded = function(event) {
let db = event.target.result;
// Создание хранилища объектов
let objectStore = db.createObjectStore("myObjectStore", { keyPath: "id" });
// Определение структуры данных
objectStore.createIndex("name", "name", { unique: false });
objectStore.createIndex("age", "age", { unique: false });
console.log("База данных успешно создана");
};

В результате выполнения данного кода будет создана база данных myDatabase с хранилищем объектов myObjectStore. Внутри хранилища будут доступны два индекса — name и age. В случае возникновения ошибок, они будут отображаться в консоли.

Добавление данных в IndexedDB

Вот пример, как использовать метод add() для добавления данных в IndexedDB:

const dbName = 'myDatabase';
const dbVersion = 1;
const request = indexedDB.open(dbName, dbVersion);
request.onerror = (event) => {
console.log('Database error:', event.target.error);
};
request.onsuccess = (event) => {
const db = event.target.result;
const transaction = db.transaction(['myObjectStore'], 'readwrite');
const objectStore = transaction.objectStore('myObjectStore');
const newData = { id: 1, name: 'John Doe' };
const requestAdd = objectStore.add(newData);
requestAdd.onsuccess = (event) => {
console.log('Data added successfully!');
};
requestAdd.onerror = (event) => {
console.log('Error adding data:', event.target.error);
};
};
request.onupgradeneeded = (event) => {
const db = event.target.result;
const objectStore = db.createObjectStore('myObjectStore', { keyPath: 'id' });
objectStore.createIndex('name', 'name', { unique: false });
};

В этом примере мы открываем базу данных с именем «myDatabase» и версией 1. Затем мы создаем транзакцию с доступом для записи и получаем объектное хранилище с именем «myObjectStore». Далее мы создаем новый объект данных newData и используем метод add(), чтобы добавить его в хранилище.

Метод add() возвращает запрос, который имеет обработчики событий для успешного и неуспешного выполнения. В случае успеха данные были успешно добавлены, и в случае ошибки мы получим сообщение об ошибке.

Важно отметить, что если объектное хранилище существует, но объект с указанным ключом уже существует, то метод add() вызовет ошибку. Если вы хотите обновить существующую запись или добавить ее, если она не существует, вы можете использовать метод put().

Извлечение данных из IndexedDB

Для получения данных из IndexedDB необходимо использовать основные методы, предоставляемые этим хранилищем данных.

1. open() — открывает соединение с базой данных.

2. transaction() — создает транзакцию для выполнения операций с данными.

3. objectStore() — получает доступ к объектному хранилищу, где хранятся данные.

4. get() — извлекает данные из хранилища по заданному ключу.

5. getAll() — извлекает все данные из хранилища.

6. getAllKeys() — извлекает все ключи из хранилища.

7. index() — получает доступ к индексам, созданным в хранилище.

8. openCursor() — открывает курсор, позволяющий итерироваться по данным в хранилище.

Пример использования методов для извлечения данных:

  1. Открываем соединение с базой данных:
  2. let request = window.indexedDB.open(databaseName, version);
  3. Создаем транзакцию для выполнения операций:
  4. let transaction = db.transaction(objectStoreName, 'readonly');
  5. Получаем доступ к объектному хранилищу:
  6. let objectStore = transaction.objectStore(objectStoreName);
  7. Извлекаем данные по ключу:
  8. let request = objectStore.get(key);
  9. Извлекаем все данные из хранилища:
  10. let request = objectStore.getAll();
  11. Извлекаем все ключи из хранилища:
  12. let request = objectStore.getAllKeys();
  13. Получаем доступ к индексу:
  14. let index = objectStore.index(indexName);
  15. Открываем курсор:
  16. let request = objectStore.openCursor();

Примеры использования IndexedDB

IndexedDB предоставляет нам мощный инструмент для хранения и получения данных веб-приложениями. Рассмотрим несколько примеров использования IndexedDB:

ПримерОписание
Пример 1Сохранение данных в IndexedDB
Пример 2Получение данных из IndexedDB
Пример 3Обновление данных в IndexedDB
Пример 4Удаление данных из IndexedDB

Пример 1: Сохранение данных в IndexedDB

Для сохранения данных в IndexedDB необходимо создать транзакцию и объект хранилища. Затем мы можем добавить данные в хранилище, указав ключ и значение:

var transaction = db.transaction([«store»], «readwrite»);

var store = transaction.objectStore(«store»);

var request = store.add({ id: 1, name: «John Doe» });

Пример 2: Получение данных из IndexedDB

Чтобы получить данные из IndexedDB, мы можем использовать метод get объекта хранилища. Ниже приведен пример получения данных с ключом 1:

var transaction = db.transaction([«store»], «readonly»);

var store = transaction.objectStore(«store»);

var request = store.get(1);

request.onsuccess = function(e) {

    var result = e.target.result;

}

Пример 3: Обновление данных в IndexedDB

Чтобы обновить данные в IndexedDB, мы можем использовать метод put объекта хранилища. В примере ниже мы обновляем имя пользователя с ключом 1:

var transaction = db.transaction([«store»], «readwrite»);

var store = transaction.objectStore(«store»);

var request = store.put({ id: 1, name: «Jane Doe» });

Пример 4: Удаление данных из IndexedDB

Для удаления данных из IndexedDB мы можем использовать метод delete объекта хранилища. В следующем примере мы удаляем данные с ключом 1:

var transaction = db.transaction([«store»], «readwrite»);

var store = transaction.objectStore(«store»);

var request = store.delete(1);

В этих примерах мы познакомились с основными методами работы с IndexedDB. Этот функционал позволяет сохранять, получать, обновлять и удалять данные в локальной базе данных браузера. Используя IndexedDB, вы можете создавать мощные веб-приложения, работающие с данными без необходимости постоянного подключения к серверу.

Оцените статью