検索
ホームページウェブフロントエンドH5 チュートリアルIndexeddb データベースの使用方法の詳細な説明

Indexeddb データベースの使用方法の詳細な説明

Mar 26, 2018 pm 04:23 PM
indexeddbデータベース詳しい説明

今回は、indexeddb データベースの使用方法について詳しく説明します。次に、indexeddb データベースを使用する際の 注意事項 について説明します。

はじめに

HTML5のローカルストレージには、クライアント上にローカルに保存されるNoSQLデータベースであるindexedDBというデータベースがあり、大量のデータを保存できます。前回の記事: HTML5 上級シリーズ: Web ストレージから、Web ストレージがローカルの単純なデータに便利かつ柔軟にアクセスできることがわかりましたが、大量の構造化ストレージの場合、indexedDB の利点はさらに明白です。次に、indexedDB がデータを保存する方法を見てみましょう。

データベースに接続

Web サイトには複数の IndexedDB データベースを含めることができますが、各データベースの名前は一意です。データベース名を使用して特定のデータベースに接続する必要があります。

var request = indexedDB.open('dbName', 1);  // 打开 dbName 数据库
request.onerror = function(e){              // 监听连接数据库失败时执行
    console.log('连接数据库失败');
}
request.onsuccess = function(e){            // 监听连接数据库成功时执行
    console.log('连接数据库成功');
}
indexedDB.open メソッドを使用してデータベースに接続します。このメソッドは 2 つのパラメーターを受け取ります。1 つ目はデータベース名、2 つ目はデータベースのバージョン番号です。このメソッドは、データベースに接続するためのリクエスト オブジェクトを表す IDBOpenDBRequest オブジェクトを返します。リクエスト オブジェクトの onsuccess イベントと onerror イベントをリッスンすることで、接続が成功または失敗した場合に実行されるメソッドを定義できます。

indexedDB API では、データベース内のデータ ウェアハウスを同じバージョンで変更することができないため、indexedDB.open メソッドで新しいバージョン番号を渡してバージョンを更新し、データベース内の変更が繰り返し行われないようにする必要があります。同じバージョン。バージョン番号は整数である必要があります。

var request = indexedDB.open('dbName', 2);  // 更新版本,打开版本为2的数据库
// ...
request.onupgradeneeded = function(e){
    console.log('新数据库版本号为=' + e.newVersion);
}
リクエストオブジェクトのonupgradeneededイベントをリッスンすることで、データベースのバージョンが更新されたときに実行されるメソッドを定義します。

データベースを閉じる

indexedDB.open を使用してデータベースに正常に接続すると、IDBOpenDBRequest オブジェクトが返され、オブジェクトの close メソッドを呼び出してデータベースを閉じることができます。

var request = indexedDB.open('dbName', 2);
// ...
request.onsuccess = function(e){
    console.log('连接数据库成功');
    var db = e.target.result;
    db.close();
    console.log('数据库已关闭');
}

データベースの削除

indexedDB.deleteDatabase('dbName');
console.log('数据库已删除');

オブジェクトの作成warehouse

オブジェクトストア(オブジェクトウェアハウス)はindexedDBデータベースの基礎であり、indexedDBにはデータベーステーブルは存在せず、オブジェクトウェアハウスはデータベースに相当します。テーブル。

var request = indexedDB.open('dbName', 3);
// ...
request.onupgradeneeded = function(e){
    var db = e.target.result;
    var store = db.createObjectStore('Users', {keyPath: 'userId', autoIncrement: false});
    console.log('创建对象仓库成功');
}
db.createObjectStore メソッドは 2 つのパラメーターを受け取ります。最初のパラメーターはオブジェクト ウェアハウス名、2 番目のパラメーターはオプションのパラメーター、値は js オブジェクトです。このオブジェクトの keyPath 属性は主キーであり、データベース テーブルの主キーとしての id に相当します。 autoIncrement 属性が false の場合、主キーの値は自動的に増加せず、データを追加するときに主キーの値を指定する必要があることを意味します。

注: データベースでは、オブジェクト ウェアハウス名を繰り返すことはできません。繰り返さないと、ブラウザーによってエラーが報告されます。

インデックスの作成

indexedDB データベース内で取得する場合、インデックスは、インデックスとして設定された属性を介してのみデータベース内に作成されます。

var request = indexedDB.open('dbName', 4);
// ...
request.onupgradeneeded = function(e){
    var db = e.target.result;
    var store = db.createObjectStore('newUsers', {keyPath: 'userId', autoIncrement: false});
    var idx = store.createIndex('usernameIndex','userName',{unique: false})
    console.log('创建索引成功');
}
store.createIndex メソッドは 3 つのパラメーターを受け取ります。1 つ目はインデックス名で、2 つ目はデータ オブジェクトの属性です。上記の例では、userName 属性がインデックスの作成に使用されます。値が 1 のオプションのパラメーター。このオブジェクトの unique 属性は true です。これは、インデックス値が同じであってはいけない、つまり 2 つのデータの userName が同じであってはいけないことを意味し、false の場合は同じであってもよいことを意味します。

トランザクションに基づく

IndexedDB では、すべてのデータ操作はトランザクション内でのみ実行できます。データベースに正常に接続したら、IDBOpenDBRequest オブジェクトのトランザクション メソッドを使用して、読み取り専用トランザクションまたは読み取り/書き込みトランザクションを開始できます。

var request = indexedDB.open('dbName', 5);
// ...
request.onupgradeneeded = function(e){
    var db = e.target.result;
    var tx = db.transaction('Users','readonly');
    tx.oncomplete = function(e){
        console.log('事务结束了');
    }
    tx.onabort = function(e){
        console.log('事务被中止了');
    }
}
db.transaction メソッドは 2 つのパラメーターを受け取ります。最初のパラメーターは文字列または配列であり、配列の場合はオブジェクト ウェアハウス名で構成される配列です。任意のオブジェクト ウェアハウスを操作できます。 2 番目のパラメーターは

Transaction Mode です。 readonly が渡されると、オブジェクト ウェアハウスでは読み取り操作のみが実行でき、書き込み操作は実行できません。 Readwrite は、読み取りおよび書き込み操作に渡すことができます。

操作データ

  1. add(): データを追加します。オブジェクト ウェアハウスに保存する必要があるオブジェクトであるパラメーターを受け取ります。

  2. put() : データを追加または変更します。オブジェクト ウェアハウスに保存する必要があるオブジェクトであるパラメーターを受け取ります。

  3. get() : データを取得します。取得するデータの主キー値であるパラメータを受け取ります。

  4. delete() : 删除数据。接收一个参数,为需要获取数据的主键值。

var request = indexedDB.open('dbName', 5);
// ...
request.onsuccess = function(e){
    var db = e.target.result;
    var tx = db.transaction('Users','readwrite');
    var store = tx.objectStore('Users');
    var value = {
        'userId': 1,
        'userName': 'linxin',
        'age': 24
    }
    var req1 = store.put(value);        // 保存数据
    var req2 = store.get(1);            // 获取索引userId为1的数据
    req2.onsuccess = function(){
        console.log(this.result.userName);  // linxin
    }
    var req3 = store.delete(1);             // 删除索引为1的数据
    req3.onsuccess = function(){
        console.log('删除数据成功');        // 删除数据成功
    }
}

add 和 put 的作用类似,区别在于 put 保存数据时,如果该数据的主键在数据库中已经有相同主键的时候,则会修改数据库中对应主键的对象,而使用 add 保存数据,如果该主键已经存在,则保存失败。

检索数据

上面我们知道使用 get() 方法可以获取数据,但是需要制定主键值。如果我们想要获取一个区间的数据,可以使用游标。游标通过对象仓库的 openCursor 方法创建并打开。

openCursor 方法接收两个参数,第一个是 IDBKeyRange 对象,该对象创建方法主要有以下几种:

// boundRange 表示主键值从1到10(包含1和10)的集合。
// 如果第三个参数为true,则表示不包含最小键值1,如果第四参数为true,则表示不包含最大键值10,默认都为false
var boundRange = IDBKeyRange.bound(1, 10, false, false);
// onlyRange 表示由一个主键值的集合。only() 参数则为主键值,整数类型。
var onlyRange = IDBKeyRange.only(1);
// lowerRaneg 表示大于等于1的主键值的集合。
// 第二个参数可选,为true则表示不包含最小主键1,false则包含,默认为false
var lowerRange = IDBKeyRange.lowerBound(1, false);
// upperRange 表示小于等于10的主键值的集合。
// 第二个参数可选,为true则表示不包含最大主键10,false则包含,默认为false
var upperRange = IDBKeyRange.upperBound(10, false);

openCursor 方法的第二个参数表示游标的读取方向,主要有以下几种:

  1. next : 游标中的数据按主键值升序排列,主键值相等的数据都被读取

  2. nextunique : 游标中的数据按主键值升序排列,主键值相等只读取第一条数据

  3. prev : 游标中的数据按主键值降序排列,主键值相等的数据都被读取

  4. prevunique : 游标中的数据按主键值降序排列,主键值相等只读取第一条数据

var request = indexedDB.open('dbName', 6);
// ...
request.onsuccess = function(e){
    var db = e.target.result;
    var tx = db.transaction('Users','readwrite');
    var store = tx.objectStore('Users');
    var range = IDBKeyRange.bound(1,10);
    var req = store.openCursor(range, 'next');
    req.onsuccess = function(){
        var cursor = this.result;
        if(cursor){
            console.log(cursor.value.userName);
            cursor.continue();
        }else{
            console.log('检索结束');
        }
    }
}

当存在符合检索条件的数据时,可以通过 update 方法更新该数据:

cursor.updata({
    userId : cursor.key,
    userName : 'Hello',
    age : 18
});

可以通过 delete 方法删除该数据:

cursor.delete();

可以通过 continue 方法继续读取下一条数据,否则读到第一条数据之后不再继续读取:

cursor.continue();

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

html5新增加的标签有哪些

使用phonegap克隆和删除联系人

以上がIndexeddb データベースの使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
H5コード:Web開発者向けのベストプラクティスH5コード:Web開発者向けのベストプラクティスApr 16, 2025 am 12:14 AM

H5コードのベストプラクティスには以下が含まれます。1。正しいDoctype宣言と文字エンコーディングを使用します。 2。セマンティックタグを使用します。 3。HTTPリクエストを削減します。 4.非同期負荷を使用します。 5。画像を最適化します。これらのプラクティスは、Webページの効率、保守性、ユーザーエクスペリエンスを向上させることができます。

H5:Web標準とテクノロジーの進化H5:Web標準とテクノロジーの進化Apr 15, 2025 am 12:12 AM

Web標準とテクノロジーは、これまでにHTML4、CSS2、および単純なJavaScriptから進化し、重要な開発を受けてきました。 1)HTML5は、CanvasやWebstorageなどのAPIを導入し、Webアプリケーションの複雑さと互換性を高めます。 2)CSS3はアニメーション関数とトランジション関数を追加して、ページをより効果的にします。 3)JavaScriptは、矢印関数やクラスなど、node.jsおよびES6の最新の構文を通じて開発効率とコードの読みやすさを向上させます。これらの変更により、パフォーマンスの最適化とWebアプリケーションのベストプラクティスの開発が促進されました。

H5はHTML5の速記ですか?詳細の調査H5はHTML5の速記ですか?詳細の調査Apr 14, 2025 am 12:05 AM

H5はHTML5の略語だけでなく、より広い最新のWeb開発テクノロジーエコシステムを表しています。1。H5にはHTML5、CSS3、JavaScript、および関連するAPIおよびテクノロジーが含まれます。 2.より豊かでインタラクティブでスムーズなユーザーエクスペリエンスを提供し、複数のデバイスでシームレスに実行できます。 3. H5テクノロジースタックを使用して、レスポンシブWebページと複雑なインタラクティブ機能を作成できます。

H5およびHTML5:Web開発で一般的に使用される用語H5およびHTML5:Web開発で一般的に使用される用語Apr 13, 2025 am 12:01 AM

H5とHTML5は、同じこと、つまりHTML5を参照します。 HTML5はHTMLの5番目のバージョンであり、セマンティックタグ、マルチメディアサポート、キャンバスとグラフィックス、オフラインストレージ、ローカルストレージなどの新しい機能をもたらし、Webページの表現力と互換性を向上させます。

H5は何を参照していますか?コンテキストの探索H5は何を参照していますか?コンテキストの探索Apr 12, 2025 am 12:03 AM

H5ReferStoHtml5、apivotaltechnologyinwebdevelopment.1)html5introduceSnewelementsandapisforrich、dynamicwebapplications.2)Itupp ortsmultimediawithoutplugins、endancingurexperiencecrossdevices.3)semanticelementsimprovecontentstructurendseo.4)H5'srespo

H5:ツール、フレームワーク、およびベストプラクティスH5:ツール、フレームワーク、およびベストプラクティスApr 11, 2025 am 12:11 AM

H5開発で習得する必要があるツールとフレームワークには、Vue.JS、React、Webpackが含まれます。 1.Vue.jsは、ユーザーインターフェイスの構築に適しており、コンポーネント開発をサポートします。 2.複雑なアプリケーションに適した仮想DOMを介したページレンダリングを最適化します。 3.Webpackは、モジュールのパッケージングに使用され、リソースの読み込みを最適化します。

HTML5の遺産:現在のH5の理解HTML5の遺産:現在のH5の理解Apr 10, 2025 am 09:28 AM

html5hassificlytransformdedwebdeveverment byintroducingsingingelements、endincemultimediasupport、およびrequrovingperformance.1)itmadewebsitesmoreaccessibleandseo-frendlywithsemantelementslike、and.2)

H5コード:アクセシビリティとセマンティックHTMLH5コード:アクセシビリティとセマンティックHTMLApr 09, 2025 am 12:05 AM

H5は、セマンティック要素とARIA属性を介して、WebページのアクセシビリティとSEO効果を改善します。 1.使用などを使用して、コンテンツ構造を整理し、SEOを改善します。 2。ARIA-LabelなどのARIA属性はアクセシビリティを強化し、支援技術ユーザーはWebページをスムーズに使用できます。

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ヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境