如何在HTML5中使用indexedDB数据库?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强>连接数据库强>
一个网站可以有多个indexedDB数据库,但每个数据库的名称是唯一的。我们需要通过数据库名来连接某个具体的数据库。
var request =, indexedDB.open (& # 39; dbname # 39;,, 1),,,//,打开,dbName 数据库 时间=request.onerror 函数(e){,,,,,,,,,,,,,//,监听连接数据库失败时执行 ,,,console.log(& # 39;连接数据库失败& # 39;); } 时间=request.onsuccess 函数(e){,,,,,,,,,,,//,监听连接数据库成功时执行 ,,,console.log(& # 39;连接数据库成功& # 39;); }
我们使用indexedDB。开放的方法来连接数据库,该方法接收两个参数,第一个是数据库名,第二个是数据库版本号。该方法会返回一个IDBOpenDBRequest对象,代表一个请求连接数据库的请求对象。我们可以通过监听请求对象的> var request =, indexedDB.open (& # 39; dbname # 39;,, 2),,,//,更新版本,打开版本为2的数据库//,… 时间=request.onupgradeneeded 函数(e) { ,,,console.log(& # 39;新数据库版本号为=& # 39;,+,e.newVersion); }
我们通过监听请求对象的> var request =, indexedDB.open (& # 39; dbname # 39;,, 2);//,… 时间=request.onsuccess 函数(e) { ,,,console.log(& # 39;连接数据库成功& # 39;); ,,,var db =, e.target.result; ,,,db.close (); ,,,console.log(& # 39;数据库已关闭& # 39;); }
<>强删除数据库强>
indexedDB.deleteDatabase (& # 39; dbname # 39;); console.log(& # 39;数据库已删除& # 39;);
<强>创建对象仓库强>
对象存储(对象仓库)是indexedDB数据库的基础,在indexedDB中并没有数据库表,而对象仓库,就是相当于一个数据库表。
var request =, indexedDB.open (& # 39; dbname # 39;,, 3);//,… 时间=request.onupgradeneeded 函数(e) { ,,,var db =, e.target.result; ,,,var store =, db.createObjectStore(& # 39;用户# 39;,,{keyPath: & # 39; userid # 39;,,自动增量:,假}); ,,,console.log(& # 39;创建对象仓库成功& # 39;); }
db。createObjectStore方法接收两个参数,第一个为对象仓库名,第二个参数为可选参数,值为一个js对象。该对象中的keyPath属性为主键,相当于数据库表中标识为主键.autoIncrement属性为假,则表示主键值不自增、添加数据时需指定主键值。
注意:在数据库中,对象仓库名不可重复,否则浏览器会报错。
<强>创建索引强>
indexedDB数据库中通过数据对象的某个属性来创建索引,在数据库中进行检索时,只能通过被设为索引的属性进行检索。
var request =, indexedDB.open (& # 39; dbname # 39;,, 4);//,… 时间=request.onupgradeneeded 函数(e) { ,,,var db =, e.target.result; ,,,var store =, db.createObjectStore (& # 39; newUsers& # 39;,, {keyPath: & # 39; userid # 39;,,自动增量:,假}); ,,,var idx =, store.createIndex (& # 39; usernameIndex& # 39; & # 39;用户名# 39;,{独特:假}) ,,,console.log(& # 39;创建索引成功& # 39;); }
商店。方法createIndex方法接收三个参数,第一个为索引名,第二个为数据对象的属性,上例中使用的用户名属性来创建索引,第三个参数为可选参数,值为一个js对象。该对象中独特的属性为真的,代表索引值不可以相同,即两条数据的用户名不可以相同,为假则可以相同。
<>强基于事务强>
在indexedDB中,所有数据操作都只能在事务中执行。连接数据库成功后,可以使用IDBOpenDBRequest对象的交易方法开启只读事务或读写事务。
var request =, indexedDB.open (& # 39; dbname # 39;,, 5);//,… 时间=request.onupgradeneeded 函数(e) { ,,,var db =, e.target.result; ,,,var tx =, db.transaction(& # 39;用户# 39;& # 39;只读的# 39;); ,,,tx.oncomplete =,函数(e) { ,,,,,,,console.log(& # 39;事务结束了& # 39;); ,,,} ,,,tx.onabort =,函数(e) { ,,,,,,,console.log(& # 39;事务被中止了& # 39;); ,,,} }
db。交易方法接收两个参数,第一个参数可以是字符串或数组,字符串时则是一个对象仓库名,数组时则是由对象仓库名组成的数组,事务可以对参数中任何一个对象仓库进行操作第。二个参数为事务模式,传入只读的时只能对对象仓库进行读操作,无法写操作。可以传入读写进行读写操作。