0

我目前正在开发一个使用 SQLite 数据库的网络应用程序。我可以创建数据库并将信息写入其中,但我无法在以后的代码中使用存储的信息。

这是我用来从数据库中读取的代码:

function GetItemFromDB(request, level, callback) {
DB.transaction(
        function (transaction) {
            transaction.executeSql(
                'SELECT ? FROM levels WHERE id=?;',
                [request, level], function (transaction, results) {
                    callback(results);
                });
        }
);

}

然后我想使用存储的信息在游戏中创建一个关卡。我这样做是这样的:

var ptop = GetItemFromDB('ptop', level);

其中 ptop 是包含我想要的信息的行,level 是游戏中的当前级别,

所以我的问题是:如何从数据库中加载存储的信息,然后在代码中使用它?

谢谢你的时间 :)

4

1 回答 1

2

我认为您正在尝试使用异步 WebSQL API 获取返回值,因此您将永远不会从函数 GetItemFromDB 收到返回值。

如果你想从你的 DB 对象异步读取数据,你应该尝试这样的事情:

function GetItemFromDB(request, level, callback) {
    DB.transaction(function(tx){
        tx.executeSql('SELECT ' + request + ' FROM levels WHERE id = ?', [level], function(tx, results){
            callback(results);
        }, errDB);
    }, errDB);
}

function errDB(err) {
    console.log("Error processing SQL: " + err.code);
}

function getItemCallback(results)
{
    alert("Result rows length: " + results.rows.length);

    //result.rows are the results from the SQL
    //if you know the are only one result, you can
    //work with results.rows.item(0), else iterative over rows
    alert("ptop column of row: " + results.rows.item(0).ptop);
}

然后简单地调用函数:

GetItemFromDB('ptop', level, getItemCallback);

如果您想或需要使用同步 API,我认为此链接可能对您有所帮助:http: //www.w3.org/TR/webdatabase/#synchronous-database-api

于 2012-05-06T13:32:52.360 回答