【问题标题】:How to export WebSQL database to .sql file? (like mysqldump)如何将 WebSQL 数据库导出到 .sql 文件? (如 mysqldump)
【发布时间】:2014-03-26 10:18:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript sql html web-sql


    【解决方案1】:

    我上个月在博客上写过这个问题 (http://www.raymondcamden.com/index.cfm/2014/2/24/Creating-a-data-backup-of-a-WebSQL-database),但由于 SO 不喜欢分享解决方案,所以我将在此处发布一些代码。 ;) 基本前提是:

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

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

    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;
    }
    

    【讨论】:

    • 你能解释一下你在函数 convertResults(results) 中做了什么吗?因为那不在您的代码中?
    • 哦,对不起 - 它采用 SQLResultSet 并将其转换为简单对象的数组。我会在一秒钟内将其添加到我的答案中。
    【解决方案2】:

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

    欢迎下载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});
      }
    });
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 2014-04-18
      • 1970-01-01
      • 2015-04-22
      • 2012-07-26
      相关资源
      最近更新 更多