/**
* 打开数据库
*/
function openDB(dbName, tableName, version = 1) {
return new Promise((resolve, reject) => {
const indexedDB = window.indexedDB
let db
const request = indexedDB.open(dbName, version)
request.onsuccess = function(event) {
db = event.target.result
resolve(db)
}
request.onerror = function(event) {
reject(event)
}
request.onupgradeneeded = function(event) {
db = event.target.result
let objectStore = ''
if (!db.objectStoreNames.contains(tableName)) {
objectStore = db.createObjectStore(tableName, {
keyPath: 'id' })
}
}
})
}
/**
* 插入数据
*/
function insert(db, tableName, data) {
return new Promise((resolve, reject) => {
const request = db.transaction([tableName], 'readwrite')
.objectStore(tableName)
.add(data)
request.onsuccess = function(event) {
resolve(event)
}
request.onerror = function(event) {
reject(event)
}
})
}
/**
* 通过主键读取数据
*/
function queryByKey(db, tableName, key) {
return new Promise((resolve, reject) => {
const transaction = db.transaction([tableName])
const objectStore = transaction.objectStore(tableName)
const request = objectStore.get(key)
request.onerror = function(event) {
reject(event)
}
request.onsuccess = function(event) {
resolve(request.result)
}
})
}
/**
* 通过游标读取数据
*/
function cursorQuery(db, tableName) {
const list = []
const store = db.transaction(tableName, 'readwrite')
.objectStore(tableName)
const request = store.openCursor()
return new Promise((resolve, reject) => {
request.onsuccess = function(e) {
const cursor = e.target.result
if (cursor) {
list.push(cursor.value)
cursor.continue()
} else {
resolve(list)
}
}
request.onerror = function(e) {
reject(e)
}
})
}
/**
* 通过索引读取数据
*/
function queryByIndex(db, tableName, indexName, indexValue) {
const store = db.transaction(tableName, 'readwrite').objectStore(tableName)
const request = store.index(indexName).get(indexValue)
return new Promise((resolve, reject) => {
request.onerror = function(e) {
reject(e)
}
request.onsuccess = function(e) {
resolve(e.target.result)
}
})
}
/**
* 通过索引和游标查询记录
*/
function cursorQueryByIndex(db, tableName, indexName, indexValue) {
const list = []
const store = db.transaction(tableName, 'readwrite').objectStore(tableName)
const request = store.index(indexName)
.openCursor(IDBKeyRange.only(indexValue))
return new Promise((resolve, reject) => {
request.onsuccess = function(e) {
const cursor = e.target.result
if (cursor) {
list.push(cursor.value)
cursor.continue()
} else {
resolve(list)
}
}
request.onerror = function(ev) {
reject(ev)
}
})
}
/**
* 查询所有数据
*/
function queryAll(db, tableName) {
return new Promise((resolve, reject) => {
const transaction = db.transaction([tableName])
const objectStore = transaction.objectStore(tableName)
const request = objectStore.getAll()
request.onerror = function(event) {
reject(event)
}
request.onsuccess = function(event) {
resolve(request.result)
}
})
}
/**
* 更新数据
*/
function update(db, tableName, data) {
const request = db.transaction([tableName], 'readwrite')
.objectStore(tableName)
.put(data)
return new Promise((resolve, reject) => {
request.onsuccess = function(ev) {
resolve(ev)
}
request.onerror = function(ev) {
resolve(ev)
}
})
}
/**
* 删除数据
*/
function _delete(db, tableName, id) {
const request = db.transaction([tableName], 'readwrite').objectStore(tableName).delete(id)
return new Promise((resolve, reject) => {
request.onsuccess = function(ev) {
resolve(ev)
}
request.onerror = function(ev) {
resolve(ev)
}
})
}
/**
* 删除数据库
*/
function deleteDatabase(dbName) {
const deleteRequest = window.indexedDB.deleteDatabase(dbName)
return new Promise((resolve, reject) => {
deleteRequest.onerror = function(event) {
console.log('删除失败')
}
deleteRequest.onsuccess = function(event) {
console.log('删除成功')
}
})
}
/**
* 关闭数据库
*/
function close(db) {
db.close()
console.log('数据库已关闭')
}
const UP_IMAGE_DB_NAME = 'UP_IMAGE_DB'
const UP_IMAGE_TABLE_NAME = 'UP_IMAGE_TABLE'
async function getUpImageDBInfo() {
const db = await openDB(UP_IMAGE_DB_NAME, UP_IMAGE_TABLE_NAME)
return db
}
export async function insertUpImageDB(key, data = {
}) {
await insert(await getUpImageDBInfo(), UP_IMAGE_TABLE_NAME, {
id: key, // 必须且值唯一
data
})
}
export async function queryAllUpImageDB() {
return await queryAll(await getUpImageDBInfo(), UP_IMAGE_TABLE_NAME)
}
export async function queryUpImageDBByKey(key) {
if (!key) {
return ''
}
return await queryByKey(await getUpImageDBInfo(), UP_IMAGE_TABLE_NAME, key)
}
IndexDB封装
猜你喜欢
转载自blog.csdn.net/qq_42048638/article/details/128344556
今日推荐
周排行