Indexed Database一种在浏览器中通过JavaScript操作的功能的数据库,为同一个源执行的程序共享空间,在同一个源拥有的空间中可以创建多个数据库,而在1个数据库中又可以创建多个对象存储。 对象存储类似于mongDB中的数据集合。
连接数据库:
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; var db = null; //连接数据库 var request = indexedDB.open('testdb'); //连接数据库成功 request.onsuccess = function(event) { //使用全局变量引用数据库 db =event.target.result; }; //连接数据库失败 request.onerror = function(event) { alert('连接数据库失败'); };
创建对象存储:
通过调用createObjectStore方法创建,该方法只能在数据库的版本更改事务中执行,setVersion方法后会自动开启该事务。
//更改DB版本 var request = db.setVersion('1.0'); request.onsuccess= function(event) { //创建对象存储 var store = db.createObjectStore('books',{ keyPath: '_id', autoIncrement:true }); }
数据的添加、删除、引用
//获得事务对象 var IDBTransaction = window.IDBTransaction || window.webkitIdbTransaction; //添加数据函数 function addData(data){ var transaction = db.transaction(['books'],IDBTransaction.READ_WRITE); //添加数据,也可使用put var request = transaction.objectStore('books').add(data); request.onsuccess = function(event) { //若成功,返回键 var key = event.target.result; console.log('success! key-> ',key); }; } //数据引用 function getData(key) { //事务的开始 var transaction = db.transaction(['books']); //数据的引用 var request = transaction.objectStore('books').get(key); request.onsuccess = function(event) { var data= event.target.result; console.log('success data->',data); }; } //数据的删除 function delData(key){ //事务的开始 var transaction = db.transaction(['books'],IDBtransaction.READ_WRITE); var request=transaction.objectStore('books').delete(key); request.onsuccess=function(event) { console.log('delete success'); }; }
索引的创建:只能在数据库版本更改事务中进行索引的创建
var request =db.setVersion('1.1'); request.onsuccess=function(event) { var transaction = event.target.result; var store=transaction.objectStore('books'); //创建索引 var index=store.createIndex('index_name','column_name'); };
使用索引检索数据
var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction; var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange; //事务和对象存储 var transation=db.transaction(['books'],IDBTransaction.READ_WRITE); var store=transaction.objectStore('books'); //创建指定范围对象10~100 var range=IDBKeyRange.bound('10','100'); //通过索引检索数据 var request=store.index('index_name').openCursor(range); request.onsuccess=function(event) { //获取IDBCursor对象 var cursor=event.target.result; //若数据存在 if(cursor){ var data =cursor.value; //更新数据 data.name='hh'; cursor.update(data); //cursor.delete删除该数据 //检索下一条 cursor.continue(); } };
事务的回滚
var request =index.openCursor(keyRange); request.onsuccess=function(event) { var cursor=event.target.result; if(cursor) { //若有readonly标志 if(cursor.value.readonly){ var transaction =event.target.transaction; //回滚 transaction.abort(); }else { cursor.delete(); cursor.continue(); } } };