indexedDB_1_数据库的创建与连接

发布时间 2023-12-17 00:07:58作者: Steperouge
  • indexedDB通过.open(DBName, version)方法连接数据库, 该方法接收两个参数, 分别代表数据库名与数据库版本; 如果该数据库已存在, 那么将会尝试连接该数据库, 如果该数据库不存在, 将会创建; 调用这个方法会返回一个IDBRequest对象

    •     let db, request = undefined
          // 打开数据库, 若没有则会创建
          request = indexedDB.open(dbName, version)
      
  • 因为IndexedDB api对数据库的读写操作是异步的, 因此需要通过回调接口来处理IDBRequest对象

  • // 数据库失败回调
    request.onerror = e => {
      reject({ code: 0 })
    }
    // 数据库成功回调
    request.onsuccess = e => {
      console.log('打开数据库成功', count)
      count++
      db = e.target.result
      resolve({ code: 1, data: db })
    }
    // 数据库更新时回调; 如果数据库不存在, 那么open()操作会创建一个新数据库, 并触发onupgradeneeded事件; 如果数据库存在,但是你指定了一个升级版的版本号, 也会立即触发该事件
    request.onupgradeneeded = e => {
      db = e.target.result
      // 如果表不存在
      if (!db.objectStoreNames.contains(tableName)) {
        console.log('不存在指定表, 新建表')
        db.createObjectStore(tableName, {
          autoIncrement: true
        })
      }
    }
    
  • 需要注意的是, 如果数据库不存在, 那么除了会执行onupgradeneeded回调处理函数外, 还会在执行完其回调代码后, 继续执行onsuccess回调函数