中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

indexedDB存儲的案例

發布時間:2020-12-02 13:35:13 來源:億速云 閱讀:434 作者:小新 欄目:web開發

這篇文章主要介紹了indexedDB存儲的案例,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>indexedDB(瀏覽器本地存儲數據庫)</title>
</head>
<body>
<p>IndexedDB 就是瀏覽器提供的本地數據庫,它可以被網頁腳本創建和操作。</p>
<p>IndexedDB 允許儲存大量數據,提供查找接口,還能建立索引。</p>
<h4>indexedDB特點</h4>
<ol>
    <li>鍵值對存儲:采用對象倉庫存儲數據,所有的數據類型都可以直接存入,主鍵是獨一無二的</li>
    <li>異步:</li>
    <li>支持事務:IndexedDB 支持事務(transaction),這意味著一系列操作步驟之中,只要有一步失敗,整個事務就都取消,數據庫回滾到事務發生之前的狀態,不存在只改寫一部分數據的情況。</li>
    <li>同源限制: IndexedDB 受到同源限制,每一個數據庫對應創建它的域名。網頁只能訪問自身域名下的數據庫,而不能訪問跨域的數據庫。</li>
</ol>
<script>
    /**
     * databaseName:字符串,表示數據庫的名字,不存在則新建
     * version :第二個參數是整數,表示數據庫的版本。默認為1
     * 返回一個 IDBRequest 對象 對象通過三種事件error、success、upgradeneeded
     *
     * 新建數據庫與打開數據庫是同一個操作。如果指定的數據庫不存在,就會新建。不同之處在于,后續的操作主要在upgradeneeded事件的監聽函數里面完成
     *
     * 新建數據步驟:
     * step1:新建對象倉庫(即新建表
     * step2:新建索引
     *
     * */
    //IDBDatabase對象
    let db;
    //創建或者打開
    let request = window.indexedDB.open('newIDB');
    //刪除數據庫
    var DBDeleteRequest = window.indexedDB.deleteDatabase('newIDB');

    DBDeleteRequest.onerror = function (event) {
        console.log('Error');
    };

    DBDeleteRequest.onsuccess = function (event) {
        console.log('success');
    };

    //error事件--表示打開數據失敗
    request.onerror = function (event) {
        console.log('數據庫打開報錯');
        db.close();
    };
    request.success = function (event) {
        //通過request對象的result屬性拿到數據庫對象
        db = request.result;
        console.log(db);
        console.log('數據庫打開成功')
    };
    console.log(request);

    //onupgradeneeded---如果指定的版本號,大于數據庫的實際版本號,就會發生數據庫升級事件
    request.onupgradeneeded = function (event) {
        //通過事件對象的target.result屬性,拿到數據庫實例。
        console.log(event);
        //request對象的result屬性上面,拿到一個IDBDatabase對象,它表示連接的數據庫
        db = event.target.result;

        let objectStore;
        // 更好的寫發是判斷表是否存在
        if (!db.objectStoreNames.contains('newIDB')) {
            /**新建數據
             * 新建對象倉庫(即新建表)
             * 新增一張叫做person的表格,主鍵是id
             * */
            //主鍵(key)是默認建立索引的屬性。如果沒有可以讓 IndexedDB 自動生成主鍵db.createObjectStore('person',{ autoIncrement: true })
            objectStore = db.createObjectStore('newIDB', {keyPath: 'id'});
            /**
             * 新建索引
             * 三個參數分別為索引名稱、索引所在的屬性、配置對象(說明該屬性是否包含重復的值)
             * **/
            objectStore.createIndex('name', 'name', {unique: false});
            objectStore.createIndex('email', 'email', {unique: true});
        }


    };

    /**新增數據
     * 新增數據指的是向對象倉庫寫入數據記錄。這需要通過事務完成。
     * 寫入數據需要新建一個事務
     * 新建時必須指定表格名稱和操作模式("只讀"或"讀寫")
     * 寫入操作是一個異步操作,通過監聽連接對象的success事件和error事件,了解是否寫入成功。
     * **/
    function add() {

        //通過IDBTransaction.objectStore(name)方法,拿到 IDBObjectStore 對象,再通過表格對象的add()方法,向表格寫入一條記錄。
        var request = db.transaction(['newIDB'], 'readwrite')
            .objectStore('newIDB')
            .add({id: 1, name: '張三', age: 24, email: 'zhangsan@example.com'});

        request.onsuccess = function (event) {
            console.log('數據寫入成功');
        };

        request.onerror = function (event) {
            console.log('數據寫入失敗');
        }
    }

    setTimeout(function () {
        console.log(db);
        add();
    }, 2000);

    /** 讀取數據
     *
     *讀取數據也是通過事務完成。
     *
     *
     * **/
    function read() {
        //創建是務
        let transaction = db.transaction(['newIDB']);
        //拿到 IDBObjectStore 對象
        let objectStore = transaction.objectStore('newIDB');
        //objectStore.get()方法用于讀取數據,參數是主鍵的值。
        let request = objectStore.get(1);
        //失敗監聽
        request.onerror = function (event) {
            console.log('事務失敗');
            db.close()
        };
        //成功監聽
        request.onsuccess = function (event) {
            if (request.result) {
                console.log('Name: ' + request.result.name);
                console.log('Age: ' + request.result.age);
                console.log('Email: ' + request.result.email);
            } else {
                console.log('未獲得數據記錄');
            }
        };
    }

    setTimeout(function () {
        read();
    }, 4000);


    /**遍歷數據
     *遍歷數據表格的所有記錄,要使用指針對象 IDBCursor。
     *
     * */
    function readAll() {
        let objectStore = db.transaction('newIDB').objectStore('newIDB');
        //新建指針對象的openCursor()方法是一個異步操作,所以要監聽success事件。
        objectStore.openCursor().onsuccess = function (event) {
            let cursor = event.target.result;

            if (cursor) {
                console.log('Id: ' + cursor.key);
                console.log('Name: ' + cursor.value.name);
                console.log('Age: ' + cursor.value.age);
                console.log('Email: ' + cursor.value.email);
                cursor.continue();
            } else {
                console.log('沒有更多數據了!');
            }
        };
    }

    setTimeout(function () {
        readAll();
    }, 6000);


    /**跟新數據
     *更新數據要使用IDBObject.put()方法。
     *
     * */

    function update() {
        //put()方法自動更新了主鍵為1的記錄。
        let request = db.transaction(['newIDB'], 'readwrite')
            .objectStore('newIDB')
            .put({id: 1, name: '李四', age: 35, email: 'lisi@example.com'});

        request.onsuccess = function (event) {
            console.log('數據更新成功');
        };

        request.onerror = function (event) {
            console.log('數據更新失敗');
            db.close();
        }
    }

    setTimeout(function () {
        update();
    }, 8000);

    /**刪除數據
     *IDBObjectStore.delete()方法用于刪除記錄
     *
     * **/
    function remove() {
        let request = db.transaction(['newIDB'], 'readwrite')
            .objectStore('newIDB')
            .delete(1);

        request.onsuccess = function (event) {
            console.log('數據刪除成功');
        };
    }

    // remove();

    /**使用索引
     * 索引的意義在于,可以讓你搜索任意字段,也就是說從任意字段拿到數據記錄。如果不建立索引,默認只能搜索主鍵(即從主鍵取值)。
     * */
    function search() {
        let request = db.transaction(['newIDB'], 'readonly')
            .objectStore('newIDB')
            .index('name')
            .get('李四');
        request.onsuccess = function (e) {
            var result = e.target.result;
            if (result) {
                console.log('搜索成功')
            } else {
                console.log('搜索失敗')
            }
        }
    }

    // search();
</script>

</body>
</html>

**注意:使用的時候鏈接數據庫,失敗或者完成其他操作關閉數據庫;**

感謝你能夠認真閱讀完這篇文章,希望小編分享indexedDB存儲的案例內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东平县| 财经| 淅川县| 定安县| 孙吴县| 陆丰市| 昌都县| 景洪市| 湛江市| 偏关县| 泸溪县| 临猗县| 福贡县| 井陉县| 开化县| 济源市| 洛川县| 喀什市| 灵寿县| 满洲里市| 五常市| 陇西县| 孝义市| 南丰县| 普宁市| 新蔡县| 象山县| 富锦市| 图片| 府谷县| 雅安市| 宜丰县| 库车县| 德格县| 崇仁县| 英吉沙县| 密云县| 施秉县| 辽中县| 富顺县| 德兴市|