Разъяснение взаимодействия с базой данных в пределах телефонной связи (использует W3C Web SQL) - PullRequest
1 голос
/ 27 августа 2011

У меня есть следующий рабочий набор функций, который я адаптировал из API PhoneGap (http://docs.phonegap.com/phonegap_storage_storage.md.html#Database):

function onDeviceReady() {
         //Phonegap is ready. Open up the database and fill with data
        //
        var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
        db.transaction(populateDB, errorCB, successCB);

}


    // Transaction success callback
    //
    function successCB() {
        //Database opened succesfully - now choose the database again
        var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
        //Execute an SQL transaction against it. The successful results of
        //this transaction will be in querySuccess function below
        db.transaction(queryDB, errorCB);
    }

    // Transaction error callback
    //
    function errorCB(err) {
        console.log("Error processing SQL: "+err.code);
    }

    // Populate the database 
    //
    function populateDB(tx) {
        tx.executeSql('DROP TABLE IF EXISTS PAGES');
        tx.executeSql('CREATE TABLE IF NOT EXISTS PAGES (id unique, data)');
        tx.executeSql('INSERT INTO PAGES (id, data) VALUES (1, "First  page")');
        tx.executeSql('INSERT INTO PAGES (id, data) VALUES (2, "Second  page")');
    }

    // Query the database
    //
    function queryDB(tx) {
        tx.executeSql('SELECT * FROM PAGES', [], querySuccess, errorCB);
    }


    // Query the success callback
    //
    function querySuccess(tx, results) {
        var len = results.rows.length;
        alert("DEMO table: " + len + " rows found.");
        for (var i=0; i<len; i++){
            alert("Row = " + i + " ID = " + results.rows.item(i).id + " Data =  " + results.rows.item(i).data);
        }
    }

Глядя на это. Прав ли я, говоря, что база данных создается при каждой загрузке приложения? Это просто не имеет смысла для меня, но, возможно, это единственный способ сделать это? Если я не кодировал это неправильно

1 Ответ

0 голосов
/ 27 августа 2011

Вместо того, чтобы вызывать ваш метод заполнения прямо под открытым вызовом, присоедините прослушиватель событий к событию load базы данных.

var db = null;

 function openDB() {db = ... };

.
.
.

 if (db != null)
         addEventListener('load', loaded, false);

и затем заполните базу данных ее начальными данными в обработчике событий для события db.load.

...