indexedDB_1_数据库的创建与连接
-
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回调函数