免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
HTML5項(xiàng)目筆記10:使用HTML5 IndexDB設(shè)計(jì)離線數(shù)據(jù)庫(kù)

之前的文章(http://www.cnblogs.com/wzh2010/archive/2012/05/22/2514017.html)里面描述了HTML5 離線數(shù)據(jù)存儲(chǔ)的Web SQL,一個(gè)基于SQLite 的離線數(shù)據(jù)庫(kù),不過(guò)W3C 的 WebDatabase 規(guī)范中說(shuō)這份規(guī)范不再維護(hù)了,取而代之的是IndexDB,一個(gè)NoSQL類(lèi)型的數(shù)據(jù)庫(kù)。


 


Html5Rocks把他們的優(yōu)缺點(diǎn)做了比對(duì),IndexDB綜合看來(lái)有如下優(yōu)點(diǎn):


允許快速索引和搜索的對(duì)象,所以在HTML5 的 web應(yīng)用程序中, 你可以有效管理你的數(shù)據(jù)和高效率的讀/寫(xiě)操作。


W3C主推的離線數(shù)據(jù)庫(kù)類(lèi)型,逐漸替代Web SQL類(lèi)型數(shù)據(jù)庫(kù),更新效率高并不斷完善。


工作在異步模式下執(zhí)行每步操作。讓你使用高效率的的JavaScript事件驅(qū)動(dòng)模塊


 


現(xiàn)在我們來(lái)嘗試使用這個(gè)IndexDB:


1、初始化聲明




1             var dbName = "H5AppDB"; //數(shù)據(jù)庫(kù)名稱2             var dbVersion = 2.0; //數(shù)據(jù)庫(kù)版本3             var tablename = "todo"; //表名



 


2、初始并實(shí)例化IndexDB數(shù)據(jù)上下文 




 1  //定義一個(gè)IndexDB方法集合對(duì)象 2             var H5AppDB = {}; 3  4             //實(shí)例化IndexDB數(shù)據(jù)上下文,這邊根據(jù)瀏覽器類(lèi)型來(lái)做選擇 5             var indexedDB = window.indexedDB || window.webkitIndexedDB ||window.mozIndexedDB; 6  7             if ('webkitIndexedDB' in window) { 8                 window.IDBTransaction = window.webkitIDBTransaction; 9                 window.IDBKeyRange = window.webkitIDBKeyRange;10             }11 12             H5AppDB.indexedDB = {};13             H5AppDB.indexedDB.db = null;14 15             //錯(cuò)誤信息,打印日志16             H5AppDB.indexedDB.onerror = function (e) {17                 log.debug(e);18             };



 


3、打開(kāi)數(shù)據(jù)庫(kù),初始化數(shù)據(jù)庫(kù),并創(chuàng)建存儲(chǔ)對(duì)象




 1   H5AppDB.indexedDB.open = function () { 2                3                 //初始IndexDB 4                 var request = indexedDB.open(dbName, dbVersion); 5  6                 request.onsuccess = function (e) { 7                     // Old api: var v = "2-beta";  8                     log.debug("success to open DB: " + dbName); 9                     H5AppDB.indexedDB.db = e.target.result;10                     var db = H5AppDB.indexedDB.db;11                     if (db.setVersion) {12                         console.log("in old setVersion: " + db.setVersion);13                         if (db.version != dbVersion) {14                             var req = db.setVersion(dbVersion);15                             req.onsuccess = function () {16                                 if (db.objectStoreNames.contains(tablename)) {17                                     db.deleteObjectStore(tablename);18                                 }19                                 var store = db.createObjectStore(tablename, { keyPath: "timeStamp" });//keyPath:主鍵,唯一性20 21                                 var trans = req.result;22                                 trans.oncomplete = function (e) {23                                     console.log("== trans oncomplete ==");24                                     H5AppDB.indexedDB.getAllTodoItems();25                                 }26                             };27                         }28                         else {29                            H5AppDB.indexedDB.getAllTodoItems();30                         }31                     }32                     else {33                        H5AppDB.indexedDB.getAllTodoItems();34                     }35                 }36 37                 //如果版本不一致,執(zhí)行版本升級(jí)的操作38                 request.onupgradeneeded = function (e) {39                     log.debug("going to upgrade our DB!");40 41                     H5AppDB.indexedDB.db = e.target.result;42                     var db = H5AppDB.indexedDB.db;43                     if (db.objectStoreNames.contains(tablename)) {44                         db.deleteObjectStore(tablename);45                     }46 47                     var store = db.createObjectStore(tablename, { keyPath: "timeStamp" });//NoSQL類(lèi)型數(shù)據(jù)庫(kù)中必須的主鍵,唯一性48 49                     H5AppDB.indexedDB.getAllTodoItems();50                 }51 52                 request.onfailure = H5AppDB.indexedDB.onerror;53             };



 


4、獲取對(duì)象信息,并進(jìn)行輪詢讀取,然后綁定到頁(yè)面




 1   //、獲取對(duì)象信息 2             H5AppDB.indexedDB.getAllTodoItems = function () { 3  4                 var todos = document.getElementById("todoItems"); 5                 todos.innerHTML = ""; 6  7  8  9                 var db = H5AppDB.indexedDB.db;10                 var trans = db.transaction([tablename], "readwrite");//通過(guò)事物開(kāi)啟對(duì)象11                 var store = trans.objectStore(tablename);//獲取到對(duì)象的值12 13                 // Get everything in the store;14 15                 var keyRange = IDBKeyRange.lowerBound(0);16                 var cursorRequest = store.openCursor(keyRange);//開(kāi)啟索引為0的表17 18                 cursorRequest.onsuccess = function (e) {19 20                     var result = e.target.result;21 22                     if (!!result == false)23                         return;24 25                     renderTodo(result.value);26                     result.continue();//這邊執(zhí)行輪詢讀取27                 };28 29                 cursorRequest.onerror = H5AppDB.indexedDB.onerror;30             };31 32             //綁定數(shù)據(jù)33             function renderTodo(row) {34                var todos = document.getElementById("todoItems");35                var li = document.createElement("li");36                var a = document.createElement("a");37                var t = document.createTextNode(row.text);38 39               a.addEventListener("click", function() {40                 H5AppDB.indexedDB.deleteTodo(row.timeStamp);41               }, false);42 43         a.textContent = " [Delete]";44         li.appendChild(t);45         li.appendChild(a);46         todos.appendChild(li);47     };



 效果如下:



 


5、添加數(shù)據(jù)對(duì)象




 1             //4、添加數(shù)據(jù)對(duì)象 2             H5AppDB.indexedDB.addTodo = function (todoText) { 3                 var db = H5AppDB.indexedDB.db; 4                 var trans = db.transaction([tablename], "readwrite"); 5                 var store = trans.objectStore(tablename); 6  7                 var newArray = new Array("wzh","374532"); 8  9                 //數(shù)據(jù)以對(duì)象形式保存,體現(xiàn)NoSQL類(lèi)型數(shù)據(jù)庫(kù)的靈活性10                 var data = {11                     "text": todoText,12                     "timeStamp": new Date().getTime(),13                     "obj":newArray                         14                 };15 16                 var request = store.put(data);//保存數(shù)據(jù)17 18                 request.onsuccess = function (e) {19                     H5AppDB.indexedDB.getAllTodoItems();20                 };21 22                 request.onerror = function (e) {23                     log.debug("Error Adding: ", e);24                 };25             };            26             function addTodo() {27                 var todo = document.getElementById("todo");28                 H5AppDB.indexedDB.addTodo(todo.value);29                 todo.value = "";30             }



 可以隨意添加BJson格式的對(duì)象,體現(xiàn)NoSQl類(lèi)型數(shù)據(jù)庫(kù)的優(yōu)越性...



 


6、刪除數(shù)據(jù)對(duì)象(根據(jù)主鍵刪除)




 1              2             // 刪除數(shù)據(jù)對(duì)象 3             H5AppDB.indexedDB.deleteTodo = function(id) { 4               var db = H5AppDB.indexedDB.db; 5               var trans = db.transaction([tablename], "readwrite"); 6               var store = trans.objectStore(tablename); 7  8               var request = store.delete(id);//根據(jù)主鍵來(lái)刪除 9 10               request.onsuccess = function(e) {11                 12                  H5AppDB.indexedDB.getAllTodoItems();13                   alert("刪除成功");14               };15 16              request.onerror = function(e) {17                  log.debug("Error Adding: ", e);18              };19       };



 


W3C已經(jīng)停止了對(duì)Web SQL  的更新,會(huì)更加完善對(duì)Index的規(guī)范草案和標(biāo)準(zhǔn),所以以后的HTML5應(yīng)用,有用到離線端數(shù)據(jù)庫(kù)這一塊,建議優(yōu)先考慮IndexDB...


 


本文源碼

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
什么是IndexedDB:Web離線數(shù)據(jù)庫(kù)入門(mén)簡(jiǎn)介及基礎(chǔ)教程
HTML5本地存儲(chǔ)
html5的indexedDB數(shù)據(jù)庫(kù)操作實(shí)例
關(guān)于html5緩存部分比較詳細(xì)的說(shuō)明
HTML5學(xué)習(xí)-day02【悟空教程】
PHP連接數(shù)據(jù)庫(kù),實(shí)現(xiàn)最基本的增刪改查(面向?qū)ο?
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服