phonegap数据库 - 这是正确的方法?

时间:2013-04-10 11:06:12

标签: android database sqlite cordova phonegap-plugins

我正在尝试在 Phonegap Android 中实施一个应用程序。在过去的两天里,我正在寻找一种正确的方式来访问数据库并从中检索它。我没有找到我的问题的答案

我了解到Phonegap不支持SQLLITE,但支持W3C Web SQL数据库规范和W3C Web存储。

与此同时,我注意到Phonegap 1.5的几个插件现在还不存在。与此同时,我发现W3c数据库为 iOS 提供了5MB的有限存储空间。

我发现这个用于Phonegap Android的SQL插件PhoneGap-SQLitePlugin-Android 使用这个或任何其他方法是否明智。请指导我。

因此,如果您有任何可以访问数据库的示例,请分享。

1 个答案:

答案 0 :(得分:1)

我已经在这里回答了类似的问题::

Phonegap Offline Database

它概述了您可能需要的所有细节的步骤。我在这里转发答案。

<强> 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数据库(更方便,更具持久性)

设置数据库

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插件调用在所有设备上调用本机插件类。在调用期间,您可以将参数传递给类,本机类可以将数据存储在操作系统中。

例如::在iOS中,您创建了一个插件.h&amp; .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;