javascript - 如何在 Cordova 中压缩 SQL 指令?

标签 javascript cordova local-storage

我正在制作一个将使用数据库的小型应用程序,我想知道如何转换它:

function testDB()
{
    var db = window.openDatabase("Database", "1.0", "mydatabase", 2000000);
    db.transaction(queryNames, errorDB);
}
function queryNames(tx) 
{
    tx.executeSql('SELECT name FROM people WHERE id=13', [], listNames, errorDB);
}
function listNames(tx, results) 
{
    for (var i=0;i<results.rows.length;i++)
    {
        alert(results.rows.item(i).name);
    }
}
function errorDB(err)
{
    alert("Fatal error");
}

像这样的东西(如果可能更紧凑的话):

function testDB()
{
    var db = window.openDatabase("Database", "1.0", "mydatabase", 2000000);
    db.transaction(queryNames('SELECT name FROM people WHERE id=13'), errorDB);
}
function queryNames(tx, query) 
{
    tx.executeSql(, [], 
    function listNames(tx, results) 
    {
        for (var i=0;i<results.rows.length;i++)
        {
            alert(results.rows.item(i).name);
        }
    },
    errorDB);
}
function errorDB(err)
{
    alert("Fatal error");
}

简而言之,我正在尝试“回收”代码。感谢您的阅读。

最佳答案

SQLite 调用是一个事件。我使用 jQuery 创建了以下函数(该函数还将结果记录在控制台中,因此您需要控制台插件才能工作):

var db = window.openDatabase("Database", "1.0", "mydatabase", 2000000);

function queryDB(query) {

    var start    = Date.now();
    var deferred = $.Deferred();
    db.transaction(function (tx) {
        tx.executeSql(query, [], function (tx, results) {
            console.log("Rows: " + results.rows.length + " Time: " + (Date.now() - start) + "ms Query: " + query);
            deferred.resolve(results);
        }, function (error) {
            console.log("Error processing SQL: " + error.code + " " + error.no + " Query: " + query);
        });
    }, function (error) {
        console.log("Transaction Error: " + error.code + " " + error.no + " Query: " + query);
    });
    return deferred.promise();
}

函数调用是:

$.when(queryDB("SELECT * FROM table")).done(function (results) {
        // Here your logic with the results
});

这种方式的优点是,您可以同时调用多个查询:

$.when(queryDB("SELECT * FROM table1"), queryDB("SELECT * FROM table2")).done(function (results1, results2) {
        // Here your logic with the results
});

关于javascript - 如何在 Cordova 中压缩 SQL 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866603/

相关文章:

javascript - 对端点进行 GET 并使用 Angular 打印数据

javascript - 为什么 getElementById 不适用于文档以外的元素?

android - cordova apache 上的字体系列更改

android - 在外部浏览器中打开链接后,Phonegap android 应用程序终止

javascript - Google Javascript 客户端库 OAUTH 请求离线访问权限,但从未请求过

javascript - html5 Canvas - FillRect() 错误地绘制矩形

javascript - 尝试使用phonegap简单登录我现有的网络应用程序

javascript - Angular.js 常量问题?

javascript - HTML5 localStorage 最大大小是否包括键名?

security - 在 HTML5 LocalStorage 中存储密码