【问题标题】:How to export my sql query result set to CSV format?如何将我的 sql 查询结果集导出为 CSV 格式?
【发布时间】:2021-05-03 05:34:14
【问题描述】:

我正在尝试将我的数据库结果集导出到 csv 文件,在这里我正在尝试这样的事情,我正在获取数据但格式不正确,有人可以帮我解决这个问题

import com.opencsv.CSVWriter;

public class DbToCSV {

    @SuppressWarnings("deprecation")
    public static String RetrieveData(String filename) throws Exception {

        String readFile = readFile(filename);

        String sql = readFile;
        System.out.println(sql);
        PreparedStatement statement;

        DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
        String mysqlUrl = "jdbc:mysql://localhost:3306/employee";
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "root");
        statement = con.prepareStatement(sql);
        ResultSet rs = statement.executeQuery();
        System.out.println("Process Started");
        String file = filename + "/elastic1.csv";
        System.out.println(file);
        CSVWriter writer = new CSVWriter(new FileWriter(file));

        ResultSetMetaData Mdata = rs.getMetaData();
        String line1[] = { "id", "id_name", "name", "attribute_name", "values" };
        writer.writeNext(line1);
        String data[] = new String[5];
        while (rs.next()) {
            data[0] = new Integer(rs.getInt("id")).toString();
            data[1] = new Integer(rs.getInt("id_name")).toString();
            data[2] = rs.getString("name");
            data[3] = rs.getString("values");
            data[4] = rs.getString("data_part");
            writer.writeNext(data);
        }
        writer.flush();
        System.out.println("Data entered");
        return file;
    }

    public static void main(String[] args) throws Exception {
        RetrieveData("/home/Pictures");
    }
}

【问题讨论】:

标签: java java-8 apache-poi export-to-csv opencsv


【解决方案1】:

writeNext() 有一个版本,它接受一个布尔值,用于控制是否应将引号应用于所有值,或者仅应用于需要引用的值。您使用的引用所有值。

代替:

writer.writeNext(data);

使用:

writer.writeNext(data, false);

见: http://opencsv.sourceforge.net/apidocs/com/opencsv/ICSVWriter.html#writeNext-java.lang.String:A-boolean-

【讨论】:

  • 得到相同的结果@vmallet
【解决方案2】:

您可以使用 writeNext 的重载方法,该方法接受布尔值作为参数。

void writeNext(String[] nextLine, boolean applyQuotesToAll)

在此将布尔值传递为 false 以忽略引号。

[编辑]

您也可以使用构造函数来禁用引号。

CSVWriter writer = new CSVWriter(outputfile, ',',
                                 CSVWriter.NO_QUOTE_CHARACTER,
                                 CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                                 CSVWriter.DEFAULT_LINE_END);

http://opencsv.sourceforge.net/apidocs/com/opencsv/ICSVWriter.html#writeNext-java.lang.String:A-boolean-

【讨论】:

  • 能否更新问题中的代码sn-p?
  • 如果这不起作用,请尝试使用此构造函数 CSVWriter writer = new CSVWriter(outputfile, ',', CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.DEFAULT_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END);
猜你喜欢
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多