【问题标题】:How to Export Web SQL to a .CSV File如何将 Web SQL 导出到 .CSV 文件
【发布时间】:2012-02-07 19:42:01
【问题描述】:

我正在编写一个将在 webkit 浏览器中运行的应用程序。我需要它来获取本地存储在设备上的数据并以 .csv 格式导出。这可能使用javascript吗?它必须在浏览器中完成。 PHP 不是一个选项。谢谢

【问题讨论】:

  • 您是指Web SQL 数据库吗? window.openDatabase()?
  • 是的,这就是我的意思。 w3.org/TR/webdatabase

标签: javascript sqlite csv export


【解决方案1】:

您可以这样做,但您需要手动将您的 javascript 序列化为 csv。您还需要决定使用哪种 CSV 方言。

以下是一种(未经测试的)可能性,它显示了您必须使用的一般模式。

function csvQuoteCell(cell, quotechar, sepchar) {
    // quote cells containing sepchar and double quote chars
    // this is an excel dialect
    var quoted = cell;
    if (cell.indexOf(sepchar)!==-1) {
        if (cell.indexOf(quotechar)!==-1 {
            quoted = quoted.replace(quotechar, quotechar+quotechar);
        }
        quoted = quotechar+quoted+quotechar;
    }
    return quoted;
}
function array2csv(ar, quotechar, sepchar) {
    var quoted = [];
    for (var i=0;i<ar.length;i++) {
        quoted.push(csvQuoteCell(ar[i], quotechar, sepchar);
    }
    return quoted.join(sepchar);
}

var db = openDatabase('mydb','1.0','thedatabase',1024*1024);
db.readTransaction(function(tx){
    tx.executeSql('SELECT col1, col2, col3 FROM thetable', [], function(tx, results){
        var quotechar = '"';
        var sepchar = ',';
        var row, rowarray, csvstring;
        var csvs = [];
        var fieldnames = ['col1','col2','col3'];
        // this is the header row
        csvs.append(array2csv(fieldnames, quotechar, sepchar));
        for (var i=0; i<results.rows.length; i++) {
            row = results.rows.item(i);
            // you need to make sure you have an explicit order for the csv
            // row is an object with unordered keys!
            rowarray = [];
            for (var j=0;j<fieldnames.length;j++) {
                rowarray.push(row[fieldnames[j]]);
            }
            csvs.push(array2csv(rowarray, quotechar, sepchar));
        }
        csvstring = csvs.join('\r\n');
        // csvstring should now contain a multirow csv string
    });
});

但是,可能无法将该文件从 javascript“下载”到本地文件系统,只能将其上传到服务器。根据您的具体浏览器环境,您可能能够使用草稿 FileWriter api、某种 flash 或 java applet shim,或者您的设备提供的某些专有 API。

【讨论】:

  • 你能创建那个文件然后通过 ftp 发送吗?
  • 除非您的浏览器环境有一些 ftp 扩展,否则很可能没有。但是,您可以使用XMLHttpRequest 轻松地进行 HTTP POST 或 PUT。
  • openDatabase('mydb','1.0','thedatabase',1024*1024); 行是修复数据库的大小和限制,还是能够容纳超过该大小的条目总数?
【解决方案2】:

假设 sqlite 文件位于服务器上(我们不是在谈论本地存储,对吗?),您仍然需要访问文件服务器端。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 2013-01-30
  • 2012-08-27
  • 2014-01-09
相关资源
最近更新 更多