Ошибка при получении значений из SQlite DB из phoneGap - PullRequest
1 голос
/ 05 октября 2011
function populateDB(tx)
{
    tx.executeSql('DROP TABLE IF EXISTS test');
    tx.executeSql('CREATE TABLE IF NOT EXISTS test(course TEXT, grade INTEGER)');
    tx.executeSql('INSERT INTO test(course,grade) VALUES ("Geography, World",90)');
    tx.executeSql('INSERT INTO test(course,grade) VALUES ("Health",92)');
    tx.executeSql('INSERT INTO test(course,grade) VALUES ("Literature, English",91)');
    tx.executeSql('INSERT INTO test(course,grade) VALUES ("Math 201",85)');
    tx.executeSql('INSERT INTO test(course,grade) VALUES ("Science 202",95)');
}

function queryDB(tx)
{
    tx.executeSql('SELECT * FROM test',[],querrySuccess,errorCB);
}

function querrySuccess(tx,results)
{
    var len = results.rows.length;
    alert("test TABLE: "+ len +"row(s) found");
    for(var i=0;i<n;i++)
    {
        console.log("Row = " + i + " COURSE = " + results.rows.item(i).course + " GRADE =  " + results.rows.item(i).grade);
    }
}

function errorCB(err)
{
    alert("Error processing SQL"+err.code);
}

function successCB()
{
    alert("Success!");
}

function create_database()
{
    var db = window.openDatabase("Database","1.0", "Demo DB", 200000);
    db.transaction(populateDB,errorCB,successCB);
    db.transaction(queryDB,errorCB);
}

В приведенном выше коде я создаю новую базу данных с именем test. функция create_database () вызывается при загрузке моей HTML-формы. Мой вопрос заключается в том, что он показывает предупреждение для отображения количества строк, но затем выдает предупреждение «Ошибка обработки SQL», т. Е. Он перенаправляется в функцию errorCB. У тебя так? я делаю что-то неправильно? Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 18 мая 2012

Это потому, что db.transaction вызовы асинхронные. Вы пытаетесь прочитать из базы данных до завершения предыдущей транзакции, чтобы создать таблицу и вставить данные. Вы должны запустить вторую транзакцию после завершения первой

0 голосов
/ 18 мая 2012
use in callback function like this.

tx.executeSql("CREATE TABLE IF NOT EXISTS test(ID INTEGER PRIMARY KEY AUTOINCREMENT, course TEXT, grade INTEGER)",[], function (tx, results) {
       tx.executeSql('INSERT INTO test(course,grade) VALUES ("Geography, World",90)');
       tx.executeSql('INSERT INTO test(course,grade) VALUES ("Health",92)');
       tx.executeSql('INSERT INTO test(course,grade) VALUES ("Literature, English",91)');
       tx.executeSql('INSERT INTO test(course,grade) VALUES ("Math 201",85)');
       tx.executeSql('INSERT INTO test(course,grade) VALUES ("Science 202",95)');

       tx.executeSql('SELECT * FROM test',[],function(result){


       },function(error) {
           alert("erorr..." + error);
       });
});
0 голосов
/ 05 октября 2011

Я посмотрю ближе к вашему коду, но прежде всего у вас нет первичного ключа в вашей таблице.Может быть, вы могли бы проверить что-то вроде:

"CREATE TABLE IF NOT EXISTS test(ID INTEGER PRIMARY KEY AUTOINCREMENT, course TEXT, grade INTEGER)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...