如何将WebSQL数据库导出到.sql文件? (像mysqldump)

时间:2014-03-26 10:18:47

标签: javascript html sql html5 web-sql

我正在开发一个基于移动HTML的应用程序,该应用程序使用WebSQL来存储用户数据。作为WebSQL,数据库本地存储在移动设备上的客户端上。该应用程序用于离线环境。

我需要添加一个导出数据的函数,以便当应用程序稍后有互联网连接时,可以将其作为.sql文件发送回服务器。

这是我第一次使用WebSQL,我正在尝试做类似于mysqldump的事情。这可能吗?或者有没有办法用WebSQL模仿这个功能?

2 个答案:

答案 0 :(得分:1)

我上个月在博客上发表了这篇文章(http://www.raymondcamden.com/index.cfm/2014/2/24/Creating-a-data-backup-of-a-WebSQL-database),但由于对仅仅分享解决方案感到不满,我会在这里发布一些代码。 ;)基本前提是:

你浏览每张桌子。 你选择*。 您获取数据行,然后将它们转换为字符串。

这是我用来获取数据的代码。

function backup(table) {
var def = new $.Deferred();
db.readTransaction(function(tx) {
    tx.executeSql("select * from "+table, [], function(tx,results) {
        var data = convertResults(results);
        console.dir(data);
        def.resolve(data);
    });
}, dbError);

return def;
}

$(document).on("click", "#doBackupBtn", function(e) {
e.preventDefault();
console.log("Begin backup process");

$.when(
    backup("notes"), 
    backup("log")
).then(function(notes, log) {
    console.log("All done");
    //Convert to JSON
    var data = {notes:notes, log:log};
    var serializedData = JSON.stringify(data);
    console.log(serializedData);
});

});

最后两行是你要调整的。对我来说,我想要JSON,所以我使用了原生的JSON序列化。如果您想要SQL,则需要遍历数据行并生成INSERT语句。你可能最好在服务器端这样做。

我忘了包含这个实用程序。它只是将SQLResultSet对象转换为更容易的数组。

//Generic utility
function convertResults(resultset) {
var results = [];
for(var i=0,len=resultset.rows.length;i<len;i++) {
    var row = resultset.rows.item(i);
    var result = {};
    for(var key in row) {
        result[key] = row[key];
    }
    results.push(result);
}
return results;
}

答案 1 :(得分:1)

几年前我有一个部分解决方案,现在我把它打包成一个独立的库。

随意下载websqldump.js

https://github.com/sdesalas/websqldump

有一些选项,但应该能够导出您的数据库并将其发布到远程服务器,如下所示:

// Export database and POST to remote server
websqldump.export({
  database: 'NorthwindLite',
  success: function(sql) {
    $.ajax({type: 'POST', url: 'http://myserver.com/sync', data: sql});
  }
});

希望这有帮助!