HTML5 - 从本地文件加载Web SQL DB?

时间:2011-03-30 03:52:00

标签: javascript sqlite html5

让我们使用一个很棒的演示作为示例here

假设我创建了5个便笺作为“管理员”。我的浏览器有一个带有这5个便签的SQLite DB及其各自的位置和文本。然后,我将此DB文件导出到托管页面的本地服务器。然后让我们说另一台计算机上的“用户”加载此页面,默认情况下会看到我的5个便签;如何使页面从本地文件加载SQLite DB,例如/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 个答案:

答案 0 :(得分:2)

我想我找到了这个老路的答案:

<强> DEMO Here

简短示例代码(由网站提供):

$(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 :(得分:1)

在浏览器中无法原生地执行此操作,但我认为这是可能的。

您已发起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取代。