Html5之數據持久化學習

HTML5 提供了四種在客戶端存儲數據的新方法,即 localStorage 、sessionStorage、globalStorage、Web Sql Database。 


一,localStorage :

localStorage 沒有時間限制的數據存儲,第二天、第二週或下一年之後,數據依然可用。也就是說,localStorage是永遠不會過期的,除非主動刪除數據。數據可跨越多個窗口,無視當前會話,被共同訪問、使用。有點像AspNet 應用程序中的全局變量Application。


二,sessionStorage :

顧名思義它就如同AspNet中的Session。 針對一個 session 的數據存儲,任何一個頁面存儲的信息在窗口中同一網站的任何頁面都可以訪問它存儲的數據。每個窗口的值都是獨立的,它的數據會因窗口的關閉而丟失,不同窗口間的sessionStorage是不可以共享的。

 

localStorage /sessionStorage都有相同的Api 如 

localStorage.length 獲得storage中的個數 

localStorage .key(n) 獲得storage中第n個鍵值對的鍵 

localStorage.key = value 

localStorage.setItem(key, value) 添加 

localStorage.getItem(key)獲取 

localStorage.removeItem(key) 移除 

localStorage.clear() 清除 

從上面的Api可以看出,他們其實就是鍵/值對,就是字典,就是JSON。既然可以看作是json ,那麼對他們的操作就可以有如下方式: 

如:localStorage.name="liuzongyi" ;//添加 

localStorage["name"]="liuzongyi" ; //添加 

alert(localStorage.name);//獲取 

alert(localStorage["name"]);//獲取


三,globalStorage:

在瀏覽器關閉以後,使用globalStorage存儲的信息仍能夠保留下來,和sessionStorage一樣,域中任何一個頁面存儲的信息都能被所有的頁面共享。目前只有FF支持,且只支持當前域下的globalStorage存儲。

 

基本用法: 

globalStorage['developer.mozilla.org'] —— 在developer.mozilla.org下面所有的子域都可以通過這個存儲對象來進行讀和寫。 

globalStorage['mozilla.org'] —— 在mozilla.org域名下面的所有網頁都可以通過這個存儲對象來進行讀和寫。

globalStorage['org'] —— 在.org域名下面的所有網頁都可以通過這個存儲對象來進行讀和寫。

globalStorage[''] —— 在任何域名下的任何網頁都可以通過這個存儲對象來進行讀和寫。

 

方法屬性: 

setItem(key, value) —— 設置或重置 key 值。

getItem(key) —— 獲取 key 值。

removeItem(key) —— 刪除 key 值。

設置 key 值:window.globalStorage["planabc.net"].key = value;

獲取 key 值:value = window.globalStorage["planabc.net"].key;


四,Web Sql DataBase 

這節介紹Html5 本地存儲中的一個很重要的概念——Web Sql Database ,正因爲本人覺得這個很重要,所有獨立出來重點介紹。即時你完全沒聽說過這個概念,望文生義也應該知道它大概是個什麼東西。

Web SQL Database (目前只谷歌瀏覽器支持):我把它理解成一個Html5環境下可以用Js執行CRUD的Web數據庫。

對於簡單的數據,使用sessionStorage和localStorage能夠很好地完成存取,但是對於處理複雜的關係型數據,它就力不從心了。這也是 HTML 5 的“Web SQL Database”API 接口的應用所在。 

下面我將一一將介紹怎樣 創建打開數據庫,創建表,添加數據,更新數據,刪除數據,刪除表 。

 

先介紹三個核心方法

1openDatabase:這個方法使用現有數據庫或創建新數據庫創建數據庫對象。

2transaction:這個方法允許我們根據情況控制事務提交或回滾。

3executeSql:這個方法用於執行真實的SQL查詢。

 

第一步:打開連接並創建數據庫 

var dataBase = openDatabase("student", "1.0", "學生表", 1024 * 1024, function () { });
if (!dataBase) {
    alert("數據庫創建失敗!");
else {
    alert("數據庫創建成功!");
}

 

 解釋一下openDatabase方法打開一個已經存在的數據庫,如果數據庫不存在,它還可以創建數據庫。幾個參數意義分別是:

1,數據庫名稱。
2,版本號 目前爲1.0,不管他,寫死就OK。
3,對數據庫的描述。
4,設置數據的大小。
5,回調函數(可省略)。
初次調用時創建數據庫,以後就是建立連接了。
創建的數據庫就存在本地,路徑如下:
C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\databases\http_localhost_4987 。
創建的是一個sqllite數據庫,完全可以用sqllite developer(點擊下載) 打開文件,可以看到裏面的數據。

 

第二步:創建數據表 

複製代碼
this.createTable=function() {

  dataBase.transaction( function(tx) { 
    tx.executeSql(
        "create table if not exists stu (id REAL UNIQUE, name TEXT)", 
        [], 
        function(tx,result){ alert('創建stu表成功'); }, 
        function(tx, error){ alert('創建stu表失敗:' + error.message); 
    });
 });
}

複製代碼

 

解釋一下,
executeSql函數有四個參數,其意義分別是:
1)表示查詢的字符串,使用的SQL語言是SQLite 3.6.19。
2)插入到查詢中問號所在處的字符串數據。
3)成功時執行的回調函數。返回兩個參數:tx和執行的結果。
4)一個失敗時執行的回調函數。返回兩個參數:tx和失敗的錯誤信息。

 

第三步:執行增刪改查 

1)添加數據:

複製代碼
this.insert = function () {
  dataBase.transaction(function (tx) {
            tx.executeSql(
        "insert  into  stu (id, name) values(?, ?)",
        [id, '徐明祥'],
        function () { alert('添加數據成功'); },
        function (tx, error) { alert('添加數據失敗: ' + error.message); 
        } );
    });
複製代碼

 

 

 

      2)查詢數據

複製代碼
this.query = function () {
  dataBase.transaction(function (tx) {
            tx.executeSql(
        "select  *  from  stu", [],
         function (tx, result) {  //執行成功的回調函數
             //在這裏對result 做你想要做的事情吧...........
            },
         function (tx, error) {
            alert('查詢失敗: ' + error.message);
         } );
      });
}
複製代碼

解釋一下
上面代碼中執行成功的回調函數有一參數result。 

result:查詢出來的數據集。其數據類型爲 SQLResultSet ,就如同C#中的DataTable。 

SQLResultSet 的定義爲:
 interface  SQLResultSet {
             readonly  attribute  long  insertId;
             readonly  attribute  long  rowsAffected;
             readonly  attribute  SQLResultSetRowList  rows;
             };
其中最重要的屬性—SQLResultSetRowList 類型的 rows 是數據集的“行” 。 
rows 有兩個屬性:length、item 。
故,獲取查詢結果的某一行某一列的值 :result.rows[i].item[fieldname]  。 

  3)更新數據
複製代碼
this.update = function (id, name) {
    dataBase.transaction(function (tx) {
            tx.executeSql(
        "update  stu  set  name =  ?  where  id= ?",
        [name, id],
         function (tx, result) {
         },
        function (tx, error) {
            alert('更新失敗: ' + error.message);
        });
   });
}
複製代碼

      4)刪除數據
複製代碼
   this.del = function (id) {
            dataBase.transaction(function (tx) {
            tx.executeSql(
        "delete  from  stu  where  id= ?",
        [id],
         function (tx, result) {
         },
        function (tx, error) {
            alert('刪除失敗: ' + error.message);
        });
     });
   }
複製代碼

       5)刪除數據表
  this.dropTable = function () {
              dataBase.transaction(function (tx) {
            tx.executeSql('drop  table  stu');
        });
    }
 

瞭解更多:http://www.w3.org/TR/webdatabase/


注:
1) 查看谷歌瀏覽器的 “Chrome\User Data\Default ”發現百度、騰訊等好多網站已經在運用localStorage 和 Web Sql Databases 。
2) localStorage 和 Web Sql DataBase 其實都是在本地創建了一個sqllite 數據庫。
    localStorage 是一個簡單的數據庫,只建了一張表,表名叫 “ItemTable”,並且這個表裏只有兩個字段 “key”和“Value”。
   而Web Sql DataBase 就是一個完全交給用戶去操作的數據庫了,複雜或簡單完全由用戶自己根據需求而決定。 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章