- indexedDBでできること
- データベースの新規作成,接続
- データベースの削除
- オブジェクトストア(テーブル)の追加
- データ
- データ挿入
- データ取得
- データ削除
- データ検索
- index
- cursor
- ラッパーライブラリ
- dexie.js
- idb
indexedDBは非同期で実行される.成功したらonsuccess
が,失敗したらonerror
が実行される.
const dbName = 'database'
const request = indexedDB.open(dbName)
request.onupgradeneeded = (event) => {
// indexedDBのバージョン更新や新規作成時に実行する
}
request.onsuccess = (event) => {
// indexedDBの接続に成功したら実行する
}
request.onerror = (event) => {
// indexedDBの接続に失敗したら実行する
}
const request = indexedDB.deleteDatabase(dbName)
request.onsuccess = (event) => {
// dbNameが存在しないデータベースであってもこちらが実行される
}
request.onerror = (event) => {
// 削除エラー時
}
const storeName = 'storename'
// スキーマバージョニングという概念がある
// アプリリリース後などで,オブジェクトストアを追加/削除したいときに使用する.
// 前回のバージョン整数+1をすることで,オブジェクトストアに変更を与えることができる.
const dbVersion = 1
const request = indexedDB(dbName, dbVersion)
request.onupgradeneeded = (event) => {
const db = event.target.result
db.createObjectStore(storeName, { keyPath: 'id' })
}
基本的な更新の流れは
- トランザクションを作成する
- オブジェクトストアを選択する
- データCRUDアクションを行う
const sampleData = { id: 1, name: 'sampleName', favorite: 'grape' }
const request = indexedDB.open(dbName)
request.onsuccess = (event) => {
const db = event.target.result
// データ変更時にはトランザクションを作成する.
// 複数のオブジェクトストアをロックすることができる
const transaction = db.transaction([storeName1, storeName2, ...], 'readwrite') // 'readonly'もある
// 更新をかけたいオブジェクトストアを読み込む
const store = transaction.objectStore(storeName)
// データ追加だけならadd
const addRequest = store.add(sampleData)
addRequest.onsuccess = (event) => {
// 成功時
}
addRequext.onerror = (event) => {
// 失敗時
}
// データ追加/更新ならput
const putRequest = store.put(sampleData)
putRequest.onsuccess = (event) => {
// 成功時
}
putRequext.onerror = (event) => {
// 失敗時
}
}
const key = 1
const request = indexedDB.open(dbName)
request.onsuccess = (event) => {
const db = event.target.result
// データ取得時にはトランザクションを作成する.
// 複数のオブジェクトストアをロックすることができる
const transaction = db.transaction([storeName1, storeName2, ...], 'readonly')
// 取得したいオブジェクトストアを読み込む
const store = transaction.objectStore(storeName)
const getRequest = store.get(key)
getRequest.onsuccess = (event) => {
console.log(event.target.result) // { id: 1, name: 'sampleName', favorite: 'grape' }
}
}