IndexDB封装

/**
 * 打开数据库
 */
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)
}


猜你喜欢

转载自blog.csdn.net/qq_42048638/article/details/128344556
今日推荐