2012-05-06 3 views
0

В настоящее время я разрабатываю веб-приложение, в котором я использую базу данных SQLite. Я могу создать базу данных и записать в нее информацию, но я не могу использовать сохраненную информацию позже в своем коде.Невозможно прочитать SQLite DB с jQuery

Вот код, я использую для чтения из базы данных:

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 находится строка, содержащая информацию я хочу, и уровень текущего уровня в игре,

Так что мой вопрос: как я могу загрузить Storen информации базы данных и использовать его позже в коде?

Спасибо за ваше время :)

ответ

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

+0

Спасибо, но при использовании кода он по-прежнему возвращает «undefined». Однако result.rows.length равно 1. Что мне делать, чтобы вернуть значение с id = 1? – Snapcount

+0

Извините, я забыл s в переменных 'results', возможно, в этом была проблема! Я также изменил «запрос», объединив его непосредственно в оператор, потому что я не уверен, что вы можете передать его в качестве параметра для подготовленного оператора. Попробуйте еще раз и дайте мне знать, он должен работать сейчас :) – corteggo

+0

вы, сэр, мой герой! Он работает как шарм: D – Snapcount

Смежные вопросы