<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 第五節:IDBDatabase 對象 打開數據成功以后,可以從`IDBOpenDBRequest`對象的`result`屬性上面,拿到一個`IDBDatabase`對象,它表示連接的數據庫。后面對數據庫的操作,都通過這個對象完成。 ~~~ var db; var openRequest = window.indexedDB.open('demo', 1); openRequest.onerror = function (event) { console.log('Error'); }; openRequest.onsuccess = function(event) { db = openRequest.result; // ... }; ~~~ ## 一、屬性 `IDBDatabase`對象有以下屬性。 * `IDBDatabase.name`:字符串,數據庫名稱。 * `IDBDatabase.version`:整數,數據庫版本。數據庫第一次創建時,該屬性為空字符串。 * `IDBDatabase.objectStoreNames`:DOMStringList 對象(字符串的集合),包含當前數據的所有 object store 的名字。 * `IDBDatabase.onabort`:指定 abort 事件(事務中止)的監聽函數。 * `IDBDatabase.onclose`:指定 close 事件(數據庫意外關閉)的監聽函數。 * `IDBDatabase.onerror`:指定 error 事件(訪問數據庫失敗)的監聽函數。 * `IDBDatabase.onversionchange`:數據庫版本變化時觸發(發生`upgradeneeded`事件,或調用`indexedDB.deleteDatabase()`)。 下面是`objectStoreNames`屬性的例子。該屬性返回一個 DOMStringList 對象,包含了當前數據庫所有對象倉庫的名稱(即表名),可以使用 DOMStringList 對象的`contains`方法,檢查數據庫是否包含某個對象倉庫。 ~~~ if (!db.objectStoreNames.contains('firstOS')) { db.createObjectStore('firstOS'); } ~~~ 上面代碼先判斷某個對象倉庫是否存在,如果不存在就創建該對象倉庫。 ## 二、方法 `IDBDatabase`對象有以下方法。 * `IDBDatabase.close()`:關閉數據庫連接,實際會等所有事務完成后再關閉。 * `IDBDatabase.createObjectStore()`:創建存放數據的對象倉庫,類似于傳統關系型數據庫的表格,返回一個 IDBObjectStore 對象。該方法只能在`versionchange`事件監聽函數中調用。 * `IDBDatabase.deleteObjectStore()`:刪除指定的對象倉庫。該方法只能在`versionchange`事件監聽函數中調用。 * `IDBDatabase.transaction()`:返回一個 IDBTransaction 事務對象。 下面是`createObjectStore()`方法的例子。 ~~~ var request = window.indexedDB.open('demo', 2); request.onupgradeneeded = function (event) { var db = event.target.result; db.onerror = function(event) { console.log('error'); }; var objectStore = db.createObjectStore('items'); // ... }; ~~~ 上面代碼創建了一個名為`items`的對象倉庫,如果該對象倉庫已經存在,就會拋出一個錯誤。為了避免出錯,需要用到下文的`objectStoreNames`屬性,檢查已有哪些對象倉庫。 `createObjectStore()`方法還可以接受第二個對象參數,用來設置對象倉庫的屬性。 ~~~ db.createObjectStore('test', { keyPath: 'email' }); db.createObjectStore('test2', { autoIncrement: true }); ~~~ 上面代碼中,`keyPath`屬性表示主鍵(由于主鍵的值不能重復,所以上例存入之前,必須保證數據的`email`屬性值都是不一樣的),默認值為`null`;`autoIncrement`屬性表示,是否使用自動遞增的整數作為主鍵(第一個數據記錄為1,第二個數據記錄為2,以此類推),默認為`false`。一般來說,`keyPath`和`autoIncrement`屬性只要使用一個就夠了,如果兩個同時使用,表示主鍵為遞增的整數,且對象不得缺少`keyPath`指定的屬性。 下面是`deleteObjectStore()`方法的例子。 ~~~ var dbName = 'sampleDB'; var dbVersion = 2; var request = indexedDB.open(dbName, dbVersion); request.onupgradeneeded = function(e) { var db = request.result; if (e.oldVersion < 1) { db.createObjectStore('store1'); } if (e.oldVersion < 2) { db.deleteObjectStore('store1'); db.createObjectStore('store2'); } // ... }; ~~~ 下面是`transaction()`方法的例子,該方法用于創建一個數據庫事務,返回一個`IDBTransaction`對象。向數據庫添加數據之前,必須先創建數據庫事務。 ~~~ var t = db.transaction(['items'], 'readwrite'); ~~~ `transaction()`方法接受兩個參數:第一個參數是一個數組,里面是所涉及的對象倉庫,通常是只有一個;第二個參數是一個表示操作類型的字符串。目前,操作類型只有兩種:`readonly`(只讀)和`readwrite`(讀寫)。添加數據使用`readwrite`,讀取數據使用`readonly`。第二個參數是可選的,省略時默認為`readonly`模式。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看