注意:1 同一时刻只能有一个版本存在
? 2 修改数据库结构只能通过升级数据库版本
- 打开数据库
IDBObjectStore(数据库表)
创建表 , 最好是在upgradeneeded下执行;在创建数据库表的时候需要指定主键 , 主键代表了唯一的标识 , 比如 keyPath:‘id’;如果不指定主键 , 我们可以指定一个autoIncrement:true , 自增的一个概念 , 也就是不指定主键数据库会自动添加主键而且这个主键就是数字 , 依次递增的 。
const createStore = () => { //如果当前的objectStoreNames.contains包含user , 如果不包含user这个表 , 然后就用这个database.createObjectStore创建了一个表 , 这个表的名字就叫做user , 然后主键就是下面的id if(!db.objectStoreNames.contains('user')) { userStore = database.createObjectStore('user', { keyPath: 'id' }); }}指定索引:
const createStore = () => { if(!database.objectStoreNames.contains('user')) { userStore = database.createObjectStore('user', { keyPath: 'id' }); userStore.createIndex('name', 'name', { unique: true }); }}IDBTransaction(事务)
创建完之后需要往里面添加数据 , 添加数据我们就需要使用到事务 。
事务涉及到数据库的增删改查 , 它有三个状态:
- complete
- error
- abort
- IDBTransaction.db 当前数据库
- IDBTransaction.mode 模式 , 使用模式分为readonly和readwrite
- IDBTransaction.objectStoreNames 当前数据库涉及到的哪几个数组表
- IDBTransaction.error 回调
新增数据(add)
分为两种情况:一种是使用自增的数据库的id或者是自增的一个键值 , 如果已经创建主键 , 那么新增必须包含主键和另一种已创建主键但主键不可重复 。
const add = () => { /* 创建事务 */ /* 使用某个数据库 */ /* add新增 */ transactionRequest = database.transaction(['user'], 'readwrite') .objectStore('user') .add({ id: 100, name: 'Eric', age: 28, email: 'Ericlee00@163.com' });? /* 成功 */ transactionRequest.onsuccess = event => { console.log('数据写入成功', event); };? /* 失败 */ transactionRequest.onerror = error => { console.log('数据写入失败', error); }}读取数据(get)
const read = () => { /* 创建事务 */ transaction = database.transaction(['user']); /* 选择数据库表 */ table = transaction.objectStore('user'); /* 读取数据 */ transactionRequest = table.get(2);? /* 成功 */ transactionRequest.onerror = event => { console.log('数据读取失败', event); };? /* 失败 */ transactionRequest.onsuccess = event => { if (transactionRequest.result) { console.log('数据读取成功', transactionRequest.result); } else { console.log('未读取到数据'); } };}更新数据(put)
更新不存在的数据时会新建 , 也就是说在新增数据时如果相同 , 往往会出错 , 但是在更新数据时不会出错 。如果数据不存在就会新建 , 如果存在就会一直更新 。
const update = () => { transactionRequest = database.transaction(['user'], 'readwrite') .objectStore('user') .put({ id: count, name: 'David', age: 35, email: 'David@xiakedao.com' });? transactionRequest.onsuccess = function (event) { console.log('更新数据成功', event); };? transactionRequest.onerror = error => { console.log('更新数据失败', error); } }删除数据(delete)
const delete = () => { transactionRequest = database.transaction(['user'], 'readwrite') .objectStore('user') .delete(2);? transactionRequest.onsuccess = function (event) { console.log('删除数据成功', event); };? transactionRequest.onerror = error => { console.log('删除数据失败', error); } }清空数据(clear)
IDBCursor(指针)
提供了一种遍历数据的可能 。
推荐阅读
- MySQL如何存储时间datetime还是timestamp
- 茶文化阅读,舒城兰花的存储
- 自动驾驶知识科普 自动驾驶汽车的七大核心技术
- 多肉养殖基地 佛珠锦多肉怎么养殖技术
- C语言:数据结构-线性表的查找-顺序查找
- 基于隐私保护技术的DNS通信协议
- vivo的双Wi-Fi加速技术,到底是什么黑科技?
- Web端大量图片同时加载卡顿问题的优化方案
- 游戏|《艾尔登法环》第七结局是高技术力整活 台词来自律法时代废案
- 技术干货:MySQL 数据库优化
