我目前正在开发一个使用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是游戏中的当前级别,
所以我的问题是:如何从数据库中加载storen信息,稍后在代码中使用它?
感谢您的时间:)
答案 0 :(得分:2)
我认为您正在尝试使用异步WebSQL API获取返回值,因此您永远不会从函数GetItemFromDB接收返回值。
如果你想从数据库对象中异步读取数据,你应该尝试这样的事情:
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);
如果您想要或需要使用Synchronous API,我认为此链接对您有所帮助:http://www.w3.org/TR/webdatabase/#synchronous-database-api