无法让SQLite SELECT语句在phonegap中工作

时间:2013-07-22 16:48:42

标签: javascript android sqlite cordova

我写了一个对象,让我更容易使用Phonegap的数据库。 SELECT语句的部分如下:

/********************
 * Database SELECT: *
 ********************/
global.select = function(query)
{
    var resultSet = null;

    db.transaction(function(tx){ // Do SQL stuff here:
        tx.executeSql(query, [], function(tx, results){ // Success:
            // When results are there:
            if(results != null)
            {
                // return them for using them:
                resultSet = results;
                alert("Results are here: " + results);
            }
            // In all other cases:
            else
            {
                // Return false (error):
                return false;
            }
        }, function(error){ // Error:
            global.logError(error);
        });
    }, function(error){ // Error:
        global.logError(error);
    }, function(){ // Success:
        consoleLog("SELECT complete!");
        alert("Return would be: " + resultSet);
        return resultSet;
    });
} // <-- global.insert = function(query)

让我头痛的部分尝试使用上述功能从表中选择所有内容。我遇到的问题是,通过这样做,我得到了超出我的异步行为......

以下是尝试选择内容的代码:

var results;
if( results = db.select('SELECT * FROM my_table WHERE 1') )
{
    alert("Result in index.html success: " + results);
    // Do stuff with query results here...
}
else
{
    alert("Result in index.html failure: " + results);
}

执行此操作时,

alert("Result in index.html failure: " + results);

是我看到的第一个输出。它似乎在select甚至开始之前执行。我做错了什么?

另外,我不确定如何从SELECT函数返回结果。由于存在嵌套函数,我不知道如何优雅地处理它。关于那部分的任何想法?

万分感谢!

1 个答案:

答案 0 :(得分:2)

这些回调异步的;这就是WebSQL的设计方式。

db.select在数据可用之前返回;任何访问数据的代码都必须在executeSqltransaction回调函数内,或者在那里调用的函数中。