検索

IndexedDB ストレージのコード例

Mar 25, 2019 pm 02:12 PM
javascript

この記事では、indexedDB ストレージに関するコード例を紹介します。これには一定の参考値があります。必要な友人は参照できます。お役に立てば幸いです。

nbsp;html>


    <meta>
    <title>indexedDB(浏览器本地存储数据库)</title>


<p>IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。</p>
<p>IndexedDB 允许储存大量数据,提供查找接口,还能建立索引。</p>
<h3 id="indexedDB特点">indexedDB特点</h3>
<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(&#39;newIDB&#39;);
    //删除数据库
    var DBDeleteRequest = window.indexedDB.deleteDatabase(&#39;newIDB&#39;);

    DBDeleteRequest.onerror = function (event) {
        console.log(&#39;Error&#39;);
    };

    DBDeleteRequest.onsuccess = function (event) {
        console.log(&#39;success&#39;);
    };

    //error事件--表示打开数据失败
    request.onerror = function (event) {
        console.log(&#39;数据库打开报错&#39;);
        db.close();
    };
    request.success = function (event) {
        //通过request对象的result属性拿到数据库对象
        db = request.result;
        console.log(db);
        console.log(&#39;数据库打开成功&#39;)
    };
    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(&#39;newIDB&#39;)) {
            /**新建数据
             * 新建对象仓库(即新建表)
             * 新增一张叫做person的表格,主键是id
             * */
            //主键(key)是默认建立索引的属性。如果没有可以让 IndexedDB 自动生成主键db.createObjectStore(&#39;person&#39;,{ autoIncrement: true })
            objectStore = db.createObjectStore(&#39;newIDB&#39;, {keyPath: &#39;id&#39;});
            /**
             * 新建索引
             * 三个参数分别为索引名称、索引所在的属性、配置对象(说明该属性是否包含重复的值)
             * **/
            objectStore.createIndex(&#39;name&#39;, &#39;name&#39;, {unique: false});
            objectStore.createIndex(&#39;email&#39;, &#39;email&#39;, {unique: true});
        }


    };

    /**新增数据
     * 新增数据指的是向对象仓库写入数据记录。这需要通过事务完成。
     * 写入数据需要新建一个事务
     * 新建时必须指定表格名称和操作模式("只读"或"读写")
     * 写入操作是一个异步操作,通过监听连接对象的success事件和error事件,了解是否写入成功。
     * **/
    function add() {

        //通过IDBTransaction.objectStore(name)方法,拿到 IDBObjectStore 对象,再通过表格对象的add()方法,向表格写入一条记录。
        var request = db.transaction([&#39;newIDB&#39;], &#39;readwrite&#39;)
            .objectStore(&#39;newIDB&#39;)
            .add({id: 1, name: &#39;张三&#39;, age: 24, email: &#39;zhangsan@example.com&#39;});

        request.onsuccess = function (event) {
            console.log(&#39;数据写入成功&#39;);
        };

        request.onerror = function (event) {
            console.log(&#39;数据写入失败&#39;);
        }
    }

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

    /** 读取数据
     *
     *读取数据也是通过事务完成。
     *
     *
     * **/
    function read() {
        //创建是务
        let transaction = db.transaction([&#39;newIDB&#39;]);
        //拿到 IDBObjectStore 对象
        let objectStore = transaction.objectStore(&#39;newIDB&#39;);
        //objectStore.get()方法用于读取数据,参数是主键的值。
        let request = objectStore.get(1);
        //失败监听
        request.onerror = function (event) {
            console.log(&#39;事务失败&#39;);
            db.close()
        };
        //成功监听
        request.onsuccess = function (event) {
            if (request.result) {
                console.log(&#39;Name: &#39; + request.result.name);
                console.log(&#39;Age: &#39; + request.result.age);
                console.log(&#39;Email: &#39; + request.result.email);
            } else {
                console.log(&#39;未获得数据记录&#39;);
            }
        };
    }

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


    /**遍历数据
     *遍历数据表格的所有记录,要使用指针对象 IDBCursor。
     *
     * */
    function readAll() {
        let objectStore = db.transaction(&#39;newIDB&#39;).objectStore(&#39;newIDB&#39;);
        //新建指针对象的openCursor()方法是一个异步操作,所以要监听success事件。
        objectStore.openCursor().onsuccess = function (event) {
            let cursor = event.target.result;

            if (cursor) {
                console.log(&#39;Id: &#39; + cursor.key);
                console.log(&#39;Name: &#39; + cursor.value.name);
                console.log(&#39;Age: &#39; + cursor.value.age);
                console.log(&#39;Email: &#39; + cursor.value.email);
                cursor.continue();
            } else {
                console.log(&#39;没有更多数据了!&#39;);
            }
        };
    }

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


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

    function update() {
        //put()方法自动更新了主键为1的记录。
        let request = db.transaction([&#39;newIDB&#39;], &#39;readwrite&#39;)
            .objectStore(&#39;newIDB&#39;)
            .put({id: 1, name: &#39;李四&#39;, age: 35, email: &#39;lisi@example.com&#39;});

        request.onsuccess = function (event) {
            console.log(&#39;数据更新成功&#39;);
        };

        request.onerror = function (event) {
            console.log(&#39;数据更新失败&#39;);
            db.close();
        }
    }

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

    /**删除数据
     *IDBObjectStore.delete()方法用于删除记录
     *
     * **/
    function remove() {
        let request = db.transaction([&#39;newIDB&#39;], &#39;readwrite&#39;)
            .objectStore(&#39;newIDB&#39;)
            .delete(1);

        request.onsuccess = function (event) {
            console.log(&#39;数据删除成功&#39;);
        };
    }

    // remove();

    /**使用索引
     * 索引的意义在于,可以让你搜索任意字段,也就是说从任意字段拿到数据记录。如果不建立索引,默认只能搜索主键(即从主键取值)。
     * */
    function search() {
        let request = db.transaction([&#39;newIDB&#39;], &#39;readonly&#39;)
            .objectStore(&#39;newIDB&#39;)
            .index(&#39;name&#39;)
            .get(&#39;李四&#39;);
        request.onsuccess = function (e) {
            var result = e.target.result;
            if (result) {
                console.log(&#39;搜索成功&#39;)
            } else {
                console.log(&#39;搜索失败&#39;)
            }
        }
    }

    // search();
</script>




**注意:使用的时候链接数据库,失败或者完成其他操作关闭数据库;**

この記事はここで終了しました。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの JavaScript ビデオ チュートリアル 列に注目してください。

以上がIndexedDB ストレージのコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はsegmentfaultで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境