HTML5中的Indexed Database

   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();
           }
     }
};




 


上一篇:Sentry源码之HiveServer2鉴权过程


下一篇:VS2010中String^的几个常用类型转换