17

ユーザーのブラウザのサポートに応じて、IndexedDBまたはWebSQLへの汎用インターフェイスを提供するライブラリまたはプロジェクトがあるかどうか知りたいです。Chrome / Safariを使用している場合はWebSQLを使用し、FirefoxまたはInternetExplorerを使用している場合はIndexedDBを使用します。

この質問の投稿者は、自家製の解決策を持っているようですが、ソースコードを提供していません。

4

6 に答える 6

15

JasonCasdenは、彼のプレゼンテーションであるブラウザ内ストレージと私で、ライブラリ/ラッパーの膨大なリストを共有しています。リストは次のとおりです。

lawnchair
persistence.js
persistJS
amplify.store
localStorageDB
https://github.com/axemclion/IndexedDB
realStorage
YUI3 CacheOffline
dojox.storage
DomSQL
Impel
ActiveJS ActiveRecord
JazzRecord
picnet.data.DataManager
ShinyCar
lscache
Kizzy
Artemia
microcache.js
Store.js
于 2012-03-19T10:28:23.133 に答える
9

リンク先の質問でGuidoTapiaが言及しているように、非常によく知られているLawnchairを使用することをお勧めします。

それか、彼のpicnet.data.DataManagerソリューションを使用してください。

また、persistence.jsもご覧ください。

于 2011-06-09T15:20:26.480 に答える
8

私は正確な目的のためにYDN-DBを書きました。これは、IndexedDB、WebSql、およびlocalStorageのデータベースラッパーであり、クロージャーライブラリの上に構築されます。

ゴール

安全で堅牢な高性能大規模ウェブアプリのための美しいAPI。

特徴

  • IndexedDB、Web SQL、およびlocalStorageストレージメカニズムをサポートします。
  • 十分にテストされたクロージャライブラリモジュール。
  • バージョンの移行、暗号化、クエリトランザクションをサポートします。
  • 各メソッド呼び出しはアトミックトランザクションです。すべてのメソッドは非同期です。
  • 通常のjavascriptのエチケットに従ってください:単一の名前空間、グローバルなし、エラーグロブなし(ドキュメントでそのように述べていない限り)、評価なし、パラメータ化されたクエリ、これはこれ、コーディングエラースローエラーです。
  • JQueryプラグインが利用可能です(ダウンロードセクションを参照)。

基本的な使い方

最新の縮小されたJSスクリプト(ダウンロードセクションを参照)をHTMLファイルにインポートします。これにより、グローバルスコープにydn.db.Storageという単一のオブジェクトが作成されます。

var db = new ydn.db.Storage('db name');

db.setItem('x', 'some value')

db.getItem('x').success(function(value) {
  console.log('x = ' + value);
}

クエリ

クエリを使用して平均を計算する

q = db.query('customer').average('age');
avg = q.fetch()

キークエリ

q = db.query('customer', 'age').bound(18, 25, true).where('sex', '=', 'FEMALE').select('full_name')
young_girl_names = q.fetch()

取引

p1 = db.key('player', 1);
db.transaction(function() {
   p1.get().success(function(p1_obj) {
        p1_obj.health += 10;
        p1.put(p123_obj);
   });
}, [p1]);

暗号化

文字列値データは、オプションでSHA-1暗号を使用して暗号化できます。

db = new ydn.db.Store('store name')
db.setSecret(passphase); // generally send from server side upon login
db.setItem(key, value, 3600*1000); // data expire on one hour
db.getItem(key); // data will be decrypted using the provided passphase
于 2012-08-09T10:56:08.097 に答える
7

これを見てください:https ://github.com/axemclion/IndexedDBShim

これは、WebSqlを使用してIndexedDBを有効にするためのポリフィルです。私はそれを使用していて、それはかなり良いと思いますが、すべての解決策として、大きな問題なしにほとんど何でも開発できるものの、いくつかの制限があります。

于 2012-12-20T08:08:06.633 に答える
7

質問に答えました。更新を共有したいだけです。

2012年5月にJayDataがリリースされました。これは、JavaScriptの統合データアクセスライブラリであり、IndexedDB、WebSQL、SQLite、MongoDB、HTML5 localStorageデータベース、およびFacebook、OData、WebAPI、YQLデータサービスのデータを同じJavaScript言語クエリで管理するのに役立ちます。構文

WebSQLからIndexedDBに変更するということは、ストレージプロバイダーのタイプのみを変更することを意味します。

var todoDB = new TodoDatabase({ 
    provider: 'webSql', databaseName: 'MyTodoDatabase' });

var todoDB = new TodoDatabase({ 
    provider: 'indexedDB', databaseName: 'MyTodoDatabase' });

プロバイダーを指定しない場合、ライブラリーはブラウザー/デバイスの使用可能なストレージを次の優先順位(WebSQL、IndexedDB、HTML5 localStorage)で検出します。

免責事項:私はオープンソースのJayDataプロジェクトの開発者チームのメンバーです

于 2013-02-22T17:00:43.873 に答える
1

あなた(OP)があなたが受け入れた答えで提案された解決策に満足していることを願っています。

有能なソリューション(OPを含む場合と含まない場合があるグループ)をまだ探している人は、BakedGoodsをチェックしてください。

これは、すべてのネイティブおよび一部の非ネイティブクライアントストレージ機能でストレージ操作を実行するために使用できる統一されたインターフェイスを確立するライブラリです。また、それぞれがユーザーに提供する柔軟性とオプションを維持します。

これを使用すると、サポートされているデータベースタイプのいずれかでストレージ操作を実行することが問題になります...

...両方のデータベースタイプに適切な操作オプションと同等の構成を指定します。

//If the operation is a set(), and the referenced structures 
//don't exist, they will be created automatically.

var webSQLOptionsObj = {
    databaseName: "Example_DB",
    databaseDisplayName: "Example DB",
    databaseVersion: "",
    estimatedDatabaseSize: 1024 * 1024,
    tableData: {
        name: "Main",
        keyColumnName: "lastName",
        columnDefinitions: "(lastName TEXT PRIMARY KEY, firstName TEXT)"
    }, 
    tableIndexDataArray: [name: "First_Name_Index", columnNames: "(firstName)"]
};

var indexedDBOptionsObj = {
    databaseName: "Example_DB",
    databaseVersion: 1,
    objectStoreData: {
        name: "Main",
        keyPath: lastName,
        autoIncrement: false
    },
    objectStoreIndexDataArray: [
        {name: "First_Name_Index", keyPath: "firstName", unique: false, multiEntry: false}
    ],
};

var optionsObj = {
    conductDisjointly: false, 
    webSQL: webSQLOptionsObj, 
    indexedDB: indexedDBOptionsObj
};

...そして操作を行う:

bakedGoods.set({
    data: [
        {value: {lastName: "Obama", firstName: "Barack"}}, 
        {value: {lastName: "Biden", firstName: "Joe"}}
    ],
    storageTypes: ["indexedDB", "webSQL"],
    options: optionsObj,
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});

そのシンプルなインターフェイスと比類のないストレージ施設のサポートは、一部のストレージ施設固有の構成のサポートが不足しているという犠牲を払って提供されます。たとえば、複数列の主キーを持つWebSQLテーブルでのストレージ操作の実行はサポートされていません。

したがって、これらのタイプの機能を多用する場合は、他の場所を探すことをお勧めします。

ああ、そして完全な透明性のために、BakedGoodsは本当にあなたによって維持されています:)。

于 2016-07-08T21:53:46.683 に答える