HTML5 - загрузить базу данных Web SQL из локального файла? - PullRequest
2 голосов
/ 30 марта 2011

Давайте в качестве примера приведем отличную демонстрацию здесь .

Допустим, я создаю 5 заметок в качестве "администратора".В моем браузере есть БД SQLite с этими 5 заметками, соответствующими позициями и текстом.Затем я экспортирую этот файл БД на локальный сервер, где размещена страница.Давайте теперь скажем, что «пользователь» на другом компьютере загружает эту страницу и, по умолчанию, видит мои 5 заметок;как заставить страницу загрузить базу данных SQLite из локального файла, например /var/www/html/db_files/5-sticky-notes.db, чтобы конечные пользователи могли взаимодействовать с моими заметками?

Это код для загрузки базы данных конечного пользователя из личного браузера:

var db;

try {
    if (window.openDatabase) {
        db = openDatabase("5-sticky-notes", "1.0", "HTML5 Database API example", 200000);
        if (!db)
            alert("Failed to open the database on disk.  This is probably because the version was bad or there is not enough space left in this domain's quota");
    } else
        alert("Couldn't open the database.  Please try with a WebKit nightly with this feature enabled");
} catch(err) { 

}

Ответы [ 2 ]

2 голосов
/ 05 апреля 2012

Я думаю, что нашел ответ на этот старый шаг:

ДЕМО здесь

Краткий пример кода (предоставлен сайтом):

$(function(){
var demoRunning = false;

$("#startTest").click(function(){
    if(!demoRunning){
        $(this).addClass("running");
        $("#demoRunning").show();
        $("#results").text("running...");
        demoRunning = true;
        try {
            html5sql.openDatabase("demo", "Demo Database", 5*1024*1024);

            $.get('demo-statements.sql',function(sql){ //Your server created sticky notes database file
                var startTime = new Date();
                html5sql.process(
                    sql,
                    function(){ //Success
                        var endTime = new Date();
                        $("#results").text("Table with 11000 entries created in: " +
                                            ((endTime - startTime) / 1000) + "s");
                        $("#startTest").removeClass("running");
                        $("#demoRunning").hide();
                        demoRunning = false;
                    },
                    function(error, failingQuery){ //Failure
                        $("#results").text("Error: " + error.message);
                        $("#startTest").removeClass("running");
                        $("#demoRunning").hide();
                        demoRunning = false;
                    }
                );
            });

        } catch (error) {
            $("#results").text("Error: " + error.message);
            $("#startTest").removeClass("running");
            $("#demoRunning").hide();
            demoRunning = false;
        }
    }
})
});

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Это работает только в браузерах (как настольных, так и мобильных), поддерживающих webDB стандарт

1 голос
/ 30 марта 2011

Нет способа сделать это изначально в браузере, но я думаю, что это возможно.

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

Очень очень грубый псевдокод:

var db;

try
{
    if (window.openDatabase)
    {
        db = openDatabase("5-sticky-notes", "1.0", "HTML5 Database API example", 200000);

        var stickyNotesInDatabase // some code to determine if sticky notes are in the users local database

        if(!stickyNotesInDatabase)
        {
            $.getJson('/GetStickyNotes', function(data)
            {
                // Load data into database from JSON 'data' variable
            });
        }
    }
    else
    {
        // Handle no database support
    }
}
catch(err)
{ 
    // Handle error
}

Однакоесли вы собираетесь позволить другим людям просматривать ваши заметки, зачем вообще беспокоиться о локальной базе данных HTML5?Просто хранить их на сервере?


Редактировать: Я также должен отметить, что WebSQL - это устаревший стандарт, который постепенно заменяется IndexedDB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...