HTML5技术

将数据库从服务器移到浏览器--indexedDB基本操作封装 - 大~熊

字号+ 作者:H5之家 来源:H5之家 2017-06-20 10:01 我要评论( )

数据库是属于服务器的,这是天经地义的事,但是有时候数据也许并非需要存储在服务器,但是这些数据也是一条一条的记录,怎么办?今天来带领你领略一下H5的一个新特性--indexedDB的风骚。你会情不自禁的发出感叹--不可思议! 一、链接数据库 indexedDB没有创

  数据库是属于服务器的,这是天经地义的事,但是有时候数据也许并非需要存储在服务器,但是这些数据也是一条一条的记录,怎么办?今天来带领你领略一下H5的一个新特性--indexedDB的风骚。你会情不自禁的发出感叹--不可思议!

一、链接数据库

  indexedDB没有创建数据库的概念,你可以直接链接数据库,如果你链接的数据库并不存在,那么会自动的创建一个数据库。看下面的这个例子。

  

Document链接数据库 window.msIndexedDB; window.msIDBTransaction; window.IDBKeyRange window.msIDBKeyRange connectDB(name,version,success,error){ let dbConnect = indexedDB.open(name,version); dbConnect.onsuccess = function(e){ console.log(); success(e.target.result); } dbConnect.onerror = function(e){ console.log(); error(e); } dbConnect.onupgradeneeded = function(e){ success(e.target.result); let oldVersion = e.oldVersion; let newVersion = e.newVersion; console.log(newVersion); } } window.onload=function(){ let btn ); btn.onclick = function(){ connectDB((){ console.log(); },function(){ console.log() }); } }

  我点了两次链接数据库,结果是这样的。

 

  在Application的indexedDB中我们发现多了一个东西。

  

  可以看到haha数据库已经成功建立了。

  indexedDB的open方法用来链接或者更新数据库,第一次创建也认为是一次更新。第一个参数是数据库的名字,第二个参数为版本号。第一次创建或者版本号发生改变时出发更新事件upgradeneeded,链接成功后出发success事件,链接出错时触发error事件。

二、建表和索引

  

Document链接数据库 window.msIndexedDB; window.msIDBTransaction; window.IDBKeyRange window.msIDBKeyRange connectDB(name,version,success,update,error){ let dbConnect = indexedDB.open(name,version); dbConnect.onsuccess = function(e){ console.log(); success(e.target.result); } dbConnect.onerror = function(e){ console.log(); error(e); } dbConnect.onupgradeneeded = function(e){ update(e.target.result); let oldVersion = e.oldVersion; let newVersion = e.newVersion; console.log(newVersion); } } function createTable(idb,storeName,key,idxs){ idb){ console.log(idb); return ; } idxs){ console.log(); return ; } storeName){ console.log(); return ; } try{ idb.createObjectStore(storeName,key); console.log(); ){ idxs[i]; store.createIndex(idx.indexName,idx.keyPath,idx.optionalParameters); console.log(); } }catch(e){ console.log(); console.log(JSON.stringify(e)) } } window.onload=function(){ let btn ); btn.onclick = function(){ connectDB(, function(idb){ console.log(); },function(idb){ createTable(idb,},[ { indexName:, keyPath:, optionalParameters:{ unique:true, multiEntry:false }}]); },function(){ console.log() }); } }

 

  我点了一下按钮结果时这样的。

  

  

  这里用到的两个核心方法时createObjectStore,和createIndex,这两个方法必须在数据库发生更新的事件中执行。

  createObjectStore方法可以理解成是创建表,接受第一个参数为一个字符串,表示表名,第二个参数是一个对象,指定主键相关的东西,{keyPath:'主键是哪个字段',autoIncrement:是否自增}。

  createIndex方法是创建索引的,接受三个参数,第一个是一个字符串,表示索引的名字,第二个参数表示字段名(谁的索引),第三个参数是个对象,具体自己查去。索引的作用是在查询操作时可以用到,不详讲,自行google吧。

三、添加数据

  

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 谈一下我们是怎么做数据库单元测试(Database Unit Test)的 - HarlanC

    谈一下我们是怎么做数据库单元测试(Database Unit Test)的 - HarlanC

    2017-06-17 12:00

  • 最新开源DBLayer,原来数据库操作可以这么简单 - 小小明

    最新开源DBLayer,原来数据库操作可以这么简单 - 小小明

    2017-06-15 17:01

  • 【线上问题】由防火墙导致的数据库空闲连接断开问题 - Trust_FreeDom

    【线上问题】由防火墙导致的数据库空闲连接断开问题 - Trust_FreeDom

    2017-06-15 16:00

  • C#简单构架之EF进行读写分离+多数据库(Mysql/SqlService) - 追随微笑

    C#简单构架之EF进行读写分离+多数据库(Mysql/SqlService) - 追随微笑

    2017-06-14 15:01

网友点评
a