indexedDB 数据库增删改查

//打开数据库 第一个参数是字符串,表示数据库的名字。如果指定的数据库不存在,就会新建数据库
        //第二个参数是整数,表示数据库的版本
        var db;
        function open(){
            var request = window.indexedDB.open("test",3);
            request.onerror = function(event){ // 数据库打开失败
                 console.log("数据库打开失败");
            }
            request.onsuccess = function(event){ // 数据库打开成功
                 console.log("数据库打开成功");
                 console.log(event);
                 db = request.result; // 打开成功以后通过request.result拿到数据库对象
                 createTable();
            }
            request.onupgradeneeded = function(event){  //如果指定的版本号,大于数据库的实际版本号,就会发生数据库升级事件upgradeneeded
                 console.log("数据库版本升级");
//                 db = event.target.result; //这时通过事件对象的target.result属性,拿到数据库实例。
//                 createTable();
            }
        }
        open();
        
        // 新建数据库和打开数据库是同一个操作,如果指定的数据库不存在 就会创建 
        
        // 数据库新建成功以后  新建表 person  主键是id  创建之前先判断库中是否已经有这表了
        var objectStore; // 表的对象
        function createTable(){
            if(!db.objectStoreNames.contains('person')){ //db.objectStoreNames  查看给库中所有表 
                // keyPath是指定主键,如果没有合适的主键,可以自动创建createObjectStore('person',{ autoIncrement: true});  这里指定主键为一个递增额参数
                objectStore = db.createObjectStore('person',{keyPath:'id'});
                // 新建索引 为数据库表的字段   三个参数 索引名称、索引所在的属性、配置对象(说明该属性是否包含重复的值)
                objectStore.createIndex('name', 'name', { unique: false });
                objectStore.createIndex('email', 'email', { unique: true });
                objectStore.createIndex('phone', 'phone', { unique: false });
                console.log("字段创建完成");
                
            }else{
                console.log(db.objectStoreNames);
                console.log("字段创建完成");
//                add();
//                read();
//                readAll();
//                update();
                remove();
            }
        }
        
        // 新建数据  新增数据指的是向对象仓库写入数据记录。这需要通过事务完成。
        //新建事务以后,通过IDBTransaction.objectStore(name)方法,拿到 IDBObjectStore 对象,再通过表格对象的add()方法,向表格写入一条记录。
        function add(){
            var request = db.transaction(['person'],'readwrite').objectStore('person')// 读写
            .add(({ id: 3, name: '张三',  email: 'zhangssan@example.com',phone:"13589958555" }));
            //写入操作是一个异步操作,通过监听连接对象的success事件和error事件,了解是否写入成功。
            request.onsuccess = function(event){
                console.log('数据写入成功');
                read();
            };
            request.onerror = function(event){
                console.log("数据写入失败");
                console.log(event);
            };
        }
         
         
         // 读取数据  objectStore.get()方法用于读取数据,参数是主键的值。
         function read(){
             var request  = db.transaction(['person']).objectStore('person').get(3);
             request.onerror = function(event){
                 console.log("读取失败");
             }
             request.onsuccess = function(event){
                 if(event.srcElement.result){
                     console.log('成功获取数据');
                     console.log(event.srcElement.result);
                 }else{
                     console.log('未获得数据记录');
                 }
             }
             
         }
         
         // 遍历数据  遍历数据表格的所有记录,要使用指针对象 IDBCursor。
        function readAll(){
             var objectStore = db.transaction('person').objectStore('person');
             //新建指针对象的openCursor()方法是一个异步操作,所以要监听success事件。
             objectStore.openCursor().onsuccess = function(event){
                 var data = event.target.result;
                 if(data){
                     console.log(data);
                     data.continue(); // 读取完后再次读取
                 }else{
                     console.log("没有数据了");
                 }
             }
        }
        
        // 更新数据
        function update(){
            var request = db.transaction(['person'],'readwrite').objectStore('person')// 读写
            .put(({ id: 3, name: '张三',  email: 'zhangssan@example.com',phone:"13589958555" }));
            
            request.onsuccess = function(evnet){
                console.log('数据更新成功');
            }
            
            request.onerror = function(){
                console.log('数据更新失败');
            }
        }
        
        // 删除数据
        function remove(){
            var request  = db.transaction(['person'],'readwrite').objectStore('person').delete(1);
            
            request.onsuccess = function(){
                console.log('数据删除成功');
            }
        }
        
        // 根据索引查找数据  需要在新建表格的时候 对phone字段建立索引
        //objectStore.createIndex('name', 'name', { unique: false });
        //根据phone找到对应数据记录
        function indexSearch(){
            var transaction = db.transaction(['person'], 'readonly');
            var store = transaction.objectStore('person');
            var index = store.index('phone');
            var request = index.get('13585558555');
            
            request.onsuccess = function (e) {
              var result = e.target.result;
              if (result) {
                // ...
              } else {
                // ...
              }
            }
        }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值