0

私は現在、SQLiteデータベースを使用しているWebアプリを開発しています。データベースを作成して情報を書き込むことはできますが、保存されている情報を後でコードで使用することはできません。

データベースから読み取るために使用しているコードは次のとおりです。

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

非同期WebSQLAPIを使用して戻り値を取得しようとしていると思います。そのため、関数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);

Synchronous APIを使用したい、または使用する必要がある場合は、次のリンクが役立つと思います:http ://www.w3.org/TR/webdatabase/#synchronous-database-api

于 2012-05-06T13:32:52.360 に答える