Метод put() интерфейса IDBObjectStore обновляет запись в базе данных или вставляет новую запись, если данный элемент еще не существует.
put(item) put(item, key)
Первый параметр - item представляет значение, которое обновляется или добавляется в базу данных. Второй и необязательный параметр key представляет ключ, по которому надо обновить/добавить объект.
Метод put() возвращает объект IDBRequest. В случае успешного обновления/добавления у объекта IDBRequest вызывается событие success, а его свойство result будет
содержать объект с указанным ключом. В случае ошибки генерируется событие error вместе с
исключением типа DOMException. Для обработки этих событий можно использовать соответственно свойства onsuccess и
onerror
Например, пусть хранилище users в базе данных test хранит следующие объекты:
[
{ name: "Tom", age: 39, id: 1},
{ name: "Bob", age: 43, id: 2},
{ name: "Sam", age: 28, id: 3}
]
Обновим объект в хранилище "users", у которого ключ равен 1:
const request = indexedDB.open("test", 5); // подключаемся к бд test
// при создании или изменении версии базы данных создаем в ней хранилище users
request.onupgradeneeded = (event) => {
const db = event.target.result; // получаем бд
// ключом является свойство id, и оно автоматически инкрементируется
db.createObjectStore("users", { keyPath: "id", autoIncrement: true });
};
// при открытии базы данных изменяем в хранилище users 1 объект
request.onsuccess = (event) => {
const db = event.target.result; // получаем бд
const transaction = db.transaction(["users"], "readwrite"); // создаем транзакцию
const userStore = transaction.objectStore("users"); // получаем хранилище users
// получаем объект c id=1
const getRequest = userStore.get(1);
getRequest.onsuccess = () => {
const user = getRequest.result;
console.log(user);
// меняем значения свойств
user.name = "Tomas";
user.age = 22;
// обновляем значения
const updateRequest = userStore.put(user);
updateRequest.onsuccess = () => console.log("Data successfully updated");
};
getRequest.onerror = (e) => console.log(e.target.error.message); // выводим сообщение об ошибке
};