赞
踩
(function () { var dbObj = {}; /** * 打开数据库 */ dbObj.init = function (param) { this.dbName = param.dbName; this.dbVersion = param.dbVersion; this.dbStoreName = param.dbStoreName; if (!window.indexedDB) { alert('浏览器不支持indexedDB') } var request = indexedDB.open(this.dbName, this.dbVersion); // 打开数据库失败 request.onerror = function (event) { console.log('数据库打开失败,错误码:', event) } // 打开数据库成功 request.onsuccess = function (event) { // 获取数据对象 dbObj.db = event.target.result; console.log('连接数据库成功'); } // if (this.db.objectStoreNames.contains(dbObj.dbStoreName)) { // console.log('数据仓库已存在'); // } // 创建数据库 request.onupgradeneeded = function (event) { dbObj.db = event.target.result; dbObj.db.createObjectStore(dbObj.dbStoreName, { // keyPath: "id", //设置主键 设置了内联主键就不可以使用put的第二个参数(这里是个坑) autoIncrement: true // 自增 }); } } dbObj.getStore = function (dbStoreName, mode) { // 获取事务对象 var ts = dbObj.db.transaction(dbStoreName, mode); // 通过事务对象去获取对象仓库 return ts.objectStore(dbStoreName); } /** * 添加和修改数据 */ dbObj.put = function (msg, key) { var store = this.getStore(dbObj.dbStoreName, 'readwrite') var request = store.put(msg, key); request.onsuccess = function () { if (key) console.log('修改成功'); else console.log('添加成功'); }; request.onerror = function (event) { console.log(event); } } /** * 删除数据 */ dbObj.delete = function (id) { var store = this.getStore(dbObj.dbStoreName, 'readwrite') var request = store.delete(id); request.onsuccess = function () { alert('删除成功'); } } /** * 查询数据 */ dbObj.select = function (key) { var store = this.getStore(dbObj.dbStoreName, 'readwrite') if (key) var request = store.get(key); else var request = store.getAll(); request.onsuccess = function () { console.log(request.result); } } /** * 删除表 */ dbObj.clear = function () { var store = this.getStore(dbObj.dbStoreName, 'readwrite') var request = store.clear(); request.onsuccess = function () { alert('清除成功'); } }; window.dbObj = dbObj; })()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>indexedDB</title> <script src="./indexedDB.js"></script> <script> window.onload = function () { var btn = document.getElementsByTagName('button'); // 创建数据库 btn[0].onclick = function () { var dbParams = { dbName: 'User', dbVersion: '1.0', dbStoreName: 'Student' } dbObj.init(dbParams); console.log(dbObj) } // 添加数据 btn[1].onclick = function () { dbObj.put({ name: 'zhangsan', age: 12 }) } // 修改数据 btn[2].onclick = function () { dbObj.put({ name: 'zhangsan221', age: 15 },2) } // 查询数据 btn[3].onclick = function () { dbObj.select() } // 删除数据 btn[4].onclick = function () { dbObj.delete(1) } // 删库跑路 btn[5].onclick = function () { dbObj.clear() } } </script> </head> <body> <button>创建对象仓库</button> <button>添加数据</button> <button>修改数据</button> <button>查询数据</button> <button>删除数据</button> <button>删除数据仓库</button> </body> </html>
Uncaught DOMException: Failed to execute ‘put’ on ‘IDBObjectStore’: The object store uses in-line keys and the key parameter was provided.
所以要么不设置内联主键 要么设置不使用put第二个参数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。