Phonegap离线数据库

now*_*way 33 database sqlite phonegap-plugins cordova

我想在加密数据库中将一些大型离线数据存储在用户手机中(超过100 MB).如果可能,我还想分发预先填充的数据库.我也见过这个.

我知道webdatabase的事情,但因为它被折旧,我被建议不要使用它.

我也看过一些第三方插件,如SQLite插件,但它只适用于iOS和Android设备,但我的目标是4个平台(ios,android,blackberry,windows)

除了写下自己的解决方案之外,还有其他解决方案吗?

Sas*_*aZd 34

我最近制作了一个应用程序,需要这个,目标是相同的操作系统.您可以使用2个数据库的组合:

1. LocalStorage ::

检查localStorage

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

将项目设置为LocalStorage

localStorage.setItem("bar", foo);
Run Code Online (Sandbox Code Playgroud)

要么

localStorage["bar"] = foo;
Run Code Online (Sandbox Code Playgroud)

从LocalStorage获取一个项目

var foo = localStorage.getItem("bar");
Run Code Online (Sandbox Code Playgroud)

要么

var foo = localStorage["bar"];
Run Code Online (Sandbox Code Playgroud)

2. SQLite数据库(更方便,更持久)

设置您的数据库

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);
Run Code Online (Sandbox Code Playgroud)

创建表格

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)");
}
Run Code Online (Sandbox Code Playgroud)

执行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);

            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

编辑::我忘了添加最后一个选项:)

3.所有设备上的本地存储

这是Phonegap最好的部分.您可以使用Phonegap插件调用在所有设备上调用本机插件类.在调用期间,您可以将参数传递给类,本机类可以将数据存储在操作系统本身中.

例如::在iOS中,您创建一个插件.h&.m类并使用Cordova.plist文件注册它.完成后,您需要使用Phonegap从JavaScript发送对该类的调用.使用NSDictionary或任何其他NSArray类型接收参数后,可以调用CoreData类来存储无限量的数据.你永远不会用完记忆.

对于所有其他操作系统,这也可以以类似的方式完成:)

对于加密,请尝试以下:: SQLCipher

以下是有关使用现有SQLite数据库的一些其他信息.在此示例中,encrypted.db是您创建的全新数据库和pragma.

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;
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一下,这个(即LocalStorage和SQLite)正在WP8和WP7,iOS和Android中运行.尝试成功!(我正在添加此评论,因为您说,您无法让SQL在WP上工作.) (3认同)