web-dev-qa-db-ja.com

Phonegapオフラインデータベース

大きなオフラインデータをユーザーの電話(100 MB以上)に暗号化データベース。可能であれば、事前に入力されたデータベースも配布したいと思います。 this も見ました。

webdatabase については知っていますが、それは depreciated であるため、操作しないことをお勧めします。

SQLite Plugin などのサードパーティのプラグインもいくつか見ましたが、これはiOSおよびAndroidデバイスでのみ機能しますが、4つのプラットフォーム(ios、Android、blackberry)をターゲットにしています、 ウィンドウズ)

私自身のものを書き留める以外に他の解決策はありますか?

33
noway

同じOSをターゲットにして、これを必要とするアプリを最近作成しました。 2つのデータベースを組み合わせて使用​​できます。

1。 LocalStorage ::

localStorageを確認します

function supports_html5_storage() {
  try {
    return 'localStorage' in window && window['localStorage'] !== null;
  } catch (e) {
    return false;
  }
}

アイテムをLocalStorageに設定します

localStorage.setItem("bar", foo);

または

localStorage["bar"] = foo;

LocalStorageからアイテムを取得します

var foo = localStorage.getItem("bar");

または

var foo = localStorage["bar"];

2。 SQLiteデータベース(より便利で永続的な)

DBをセットアップします

var shortName = 'BHCAppDB'; 
var version = '1.0'; 
var displayName = 'BHCAppDB'; 
var maxSize = 65535; 
if (!window.openDatabase){ 
     alert('!! Databases are not supported in this Device !! \n\n We are sorry for the inconvenience and are currently working on a version that will work on your phone'); 
}
db = openDatabase(shortName, version, displayName,maxSize);
createAllTables(db);

テーブルを作成します

function createAllTables(db){
    db.transaction(function(transaction){
        transaction.executeSql("CREATE TABLE IF NOT EXISTS Profile(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT, gender TEXT,age INTEGER)");
}

SQLクエリを実行します

transaction(function(transaction){
        var rowCount = 'SELECT * FROM Profile';
        transaction.executeSql(rowCount,[],function(transaction,result){
            if(result.rows.length == 0){
                var sqlString = 'INSERT INTO Profile (name,gender,age) VALUES("自己","Female",18)';
                transaction.executeSql(sqlString);

            }
        });
    });

編集::私は最後のオプションに追加するのを忘れていました:)

3。すべてのデバイスのネイティブストレージ

これはPhonegapの最も優れた部分です。 Phonegapプラグイン呼び出しを使用して、すべてのデバイスでネイティブプラグインクラスを呼び出すことができます。呼び出し中に、クラスにパラメーターを渡すことができ、ネイティブクラスはOS自体にデータを格納できます。

たとえば:: iOSでは、プラグイン.h&.mクラスを作成し、それをCordova.plistファイルに登録します。それが完了したら、Phonegapを使用してJavaScriptからクラスへの呼び出しを送信する必要があります。 NSDictionaryまたはその他のNSArrayタイプを使用してパラメーターを受け取ったら、CoreDataクラスを呼び出して無制限の量のデータを保存できます。メモリが不足することはありません。

これは、OSの他のすべての部分でも同様に行うことができます。

暗号化については、以下を試してください:: SQLCipher

以下は、既存のSQLiteデータベースの操作に関する追加情報です。この例では、encrypted.dbは、ユーザーが作成してプラグマで作成した新しいデータベースです。

ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'secret'; -- create a new encrypted database
CREATE TABLE encrypted.t1(a,b); -- recreate the schema in the new database (you can inspect all objects using SELECT * FROM sqlite_master)
INSERT INTO encrypted.t1 SELECT * FROM t1; -- copy data from the existing tables to the new tables in the encrypted database
DETACH DATABASE encrypted;
34
SashaZd

webdatabase のW3C仕様では、Webアプリケーションワーキンググループが他の2つのストレージ関連の仕様で作業を続けることが言及されています: Web Storage および Indexed Database API

したがって、Webデータベース仕様はアクティブではなくなりましたが、他の2つの仕様はアクティブです。

Web Storageは、ユーザーのブラウザー内でローカルにデータを保存するために使用できます。それを達成するために以下の目的があります:

  • 有効期限なしでデータを保存するlocalStorage
  • 1つのセッションのデータを格納するsessionStorage

W3C仕様では次のように述べられているため、Webストレージはケース(100MB以上)にはお勧めできません。

Originあたり5メガバイトというほとんど任意の制限をお勧めします。

私の考えでは、SQLiteは、自己完結型のサーバーレスのゼロ構成トランザクションSQLデータベースエンジンを実装するインプロセスライブラリであるため、利用可能な最良のオプションです。さらに SQLiteの制限 はあなたのニーズをカバーしているようです:

SQLITE_MAX_PAGE_COUNTの可能な最大設定は2147483646です。最大ページサイズ65536で使用すると、SQLiteデータベースの最大サイズは約140テラバイトになります。

暗号化の要件については、SQLite拡張である SQLCipher を検討する必要があります。

SQLCipherは、データベースファイルの透過的な256ビットAES暗号化を提供するSQLite拡張機能です。これまでに、Zetetic LLCがオープンソース、スポンサー、メンテナンスを行っています。モバイルスペースでは、SQLCipherはかなり前からAppleのiOSとNokia/QTで広く使用されています。

別のオプションは、データベースの書き込みおよび読み取り時にデータを暗号化および復号化することです。

これがお役に立てば幸いです。

LokiJS をローカルデータベースとして使用してみましたが、非リレーショナルデータに役立つことがわかりました。私の場合、MongoDBを使用してサーバーに保存されているデータを取得しますが、システムの性質によって異なります

1
ahmed wahba

私が取り組んでいるモバイルアプリにも同様の要件があります。約500,000の異なるパーツを含むパーツテーブルへのオフラインアクセスが必要です。このテーブルのソースは、適切に定義されたGET URLを介してJSONを取得することにより、サーバーから抽出されます。

インデックスDBを検討しましたが、iOS内のモバイルブラウザーとAndroidはこれをサポートしていません。5MBのハード制限があるため、Webローカルストレージはオプションではありません。したがって、Webを使用することにしました。 SQLデータベース標準( http://www.w3.org/TR/webdatabase/ )は非推奨ですが、Web SQLデータベースの使用に関するこれまでの私の経験は非常に優れています。データベース操作は非常にうまく機能しますまた、私がサポートするモバイルデバイス(iPad 2、iPad 3、Motorola Xyboard、Samsung Galaxy Tab 2)で非常に信頼性があります。さらに、Phonegapは、この標準で動作するJavaScript APIを公開します( http:// docs。 phonegap.com/en/2.5.0/cordova_storage_storage.md.html#Storage )。

Javaユーティリティをダウンロードして、ダウンロードしたJSONデータをSQLiteデータベースに変換します。そのファイルは、Android APKまたはiOSアプリパッケージの一部としてパッケージ化されています。

Phonegapモバイルアプリが起動すると、ネイティブコードを使用して、アプリのプライベートデータディレクトリにSQLiteデータベースファイルが存在するかどうかを確認します。ファイルが存在しない場合、ネイティブコードはアプリパッケージからデータベースファイルをコピーします。

私の実装は、以下のリンクで見つけたサンプルコードに基づいています。これがお役に立てば幸いです。私の特定の実装について質問がある場合はお知らせください。

http://gauravstomar.blogspot.com/2011/08/prepopulate-sqlite-in-phonegap.html

1
jkwuc89
0
UBIK LOAD PACK