【问题标题】:How to access database using phone gap如何使用电话间隙访问数据库
【发布时间】:2012-02-23 14:08:22
【问题描述】:

我是 android phonegap 的新手。我正在使用本机应用程序存储和检索数据。我不知道如何将检索到的数据从本机显示到 phonegap(HTML) 页面。

谁能指导我如何使用phonegap访问sqlite。?

提前致谢。

【问题讨论】:

  • 您是通过原生android编码保存数据吗?你想从 phonegap 中检索值(存储在 sqlite 中)吗?
  • 是的,我通过native保存数据,并想通过phonegap检索。
  • 您是否通过服务或与此 phonegap 一起打包的某些东西保存数据,然后您想通过 phonegap 检索它?
  • 实际上它不是面向服务的。我大致写了本机来存储数据。并通过电话间隙访问数据。是否可以使用 phonegap 获取 sqlite db..??
  • 是的 可以从存储在 /data/data/package-name/databases/*.db 的 phonegap 访问数据库。

标签: android sqlite cordova


【解决方案1】:

您需要首先为 Phonegap 创建一个 Android 插件,通过它您将能够访问本机代码,从而访问本机数据库。

public class SqlitePlugin extends Plugin {

private static final String TAG = "SqlitePlugin";
private static final String CREATE_DB_ACTION = "createDatabase";
private static final String SHOW_DB_VALUES_ACTION = "showValues";

@Override
public PluginResult execute(String action, JSONArray data, String callbackId) {
    Log.i(TAG, "Plugin Called");
    PluginResult result = null;

    if (CREATE_DB_ACTION.equals(action)) {
        Log.d(TAG, "CREATE_DB_ACTION");
        DB _db = new DB(ctx);
        _db.insertValues();
    }
    else if (SHOW_DB_VALUES_ACTION.equals(action)) {
        Log.d(TAG, "SHOW_DB_VALUES_ACTION");

        JSONObject DBInfo = null;
        try {
            DBInfo = getDBValuesListing();

        } catch (JSONException e) {
            e.printStackTrace();
        }

        result = new PluginResult(Status.OK, DBInfo);

    }       
    else {
        result = new PluginResult(Status.INVALID_ACTION);
        Log.d(TAG, "Invalid action : " + action + " passed");
    }

    return result;
  }
}

然后像这样创建一个 sqlite.js 文件

    function SqlitePlugin() {
};

SqlitePlugin.prototype.createDatabase = function(successCallback, failCallback) {

return PhoneGap.exec(successCallback, failCallback, "SqlitePlugin",
        "createDatabase", [ null ]);
};

SqlitePlugin.prototype.showValues = function(params, successCallback, failCallback) {
return PhoneGap.exec(successCallback, failCallback, 'SqlitePlugin', 'showValues',
        [ params ]);
};

PhoneGap.addConstructor(function() {
PhoneGap.addPlugin("SqlitePlugin", new SqlitePlugin());
});

在你的页面(index.html)中导入这个sqlite.js,然后最后像这样使用插件

function showValues() {
    window.plugins.SqlitePlugin.showValues('showValues',
            showValuesSuccessCallBack, showValuesFailCallBack);

}
function showValuesSuccessCallBack(e) {
    if (e.Rows.length > 0) {
        alert("Success");
        for (i = 0; i < e.Rows.length; i++) {
            alert("Id = " + e.Rows[i].id);
            alert("Number = " + e.Rows[i].number);
        }
    } else {
        alert("No values in Database");
    }
}

function showValuesFailCallBack(f) {
    alert("Failure");
}

让我知道这是否适合你

【讨论】:

  • 感谢您的回复。我仍然有疑问,您在这里提到的 CREATE_DB_ACTION 和 SHOW_DB_VALUES_ACTION。无论是数据库名称还是其他名称。再次感谢。
  • 看到这个 CREATE_DB_ACTION 和 SHOW_DB_VALUES_ACTION 基本上是你在你的 sqlite.js 文件中指定的操作。就像假设当前在我们的 index.html 页面中我们使用了 window.plugins.SqlitePlugin.showValues,这表明你是将执行“showValues”操作,因此您可以在 sqliteplugin 中捕获此事件..所以您可以在那里编码..:)
【解决方案2】:

编写一个phonegap插件,将数据从native端传递到html(js) http://wiki.phonegap.com/w/page/36753494/How%20to%20Create%20a%20PhoneGap%20Plugin%20for%20Android

【讨论】:

  • 谢谢。但是你能指导我如何将本机 sqllite 与 phonegap 连接起来吗?
【解决方案3】:

好吧,您可能应该使用 HTML5 函数来存储和检索 SQLite DB 中的数据。但是,如果您打算使用本机代码执行此操作,则应该查看我们的实现,该实现用于不支持 sqlite 的旧 Android 设备。

https://github.com/cordova/cordova-android/blob/master/framework/assets/js/storage.js https://github.com/cordova/cordova-android/blob/master/framework/src/com/phonegap/Storage.java

【讨论】:

    猜你喜欢
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 2013-03-31
    • 2015-03-18
    相关资源
    最近更新 更多