ResultSet为CSV格式字符串

时间:2017-05-12 20:54:02

标签: java opencsv

我正在尝试将ResultSet对象转换为CSV格式的String对象。我曾尝试使用OpenCV将其转换为CSV文件,但我需要将其作为字符串。有一个选项可以先将其转换为文件,然后将数据转换为字符串,然后删除该文件,但这将是我无法承担的额外开销。

有没有办法实现它,我尝试搜索但到目前为止没有任何东西。

2 个答案:

答案 0 :(得分:2)

不要编写自己的方法,CSV不仅仅是用逗号连接的字符串。有几个关于配额,逃跑等的pifails。 使用专用库。我个人更喜欢univocity-parsers" broken" csv文件但是如果你处理ResultSet,你可以使用opencsv库。

    StringWriter stringWriter = new StringWriter();
    CSVWriter csvWriter = new CSVWriter(stringWriter);
    csvWriter.writeAll(resultSet, true); // including column names
    String result = stringWriter.toString();

答案 1 :(得分:2)

Apache Commons CSV

或者,您可以使用CSVPrinter中的Apache Commons CSV

CSVPrinter::printRecords( ResultSet )

方法CSVPrinter::printRecords带有一个ResultSet参数。

请参见以下示例代码中的关键行csvPrinter.printRecords(resultSet);

package org.myorg;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class QueryToCSV {

    public static void main(String[] args) throws IOException  {

        if ( args.length < 2)
            throw new IllegalArgumentException("Usage: QueryToCSV.jar <JDBCConnectionURL> <SQLForQuery> -> output to STDOUT and STDERR");

        // Create a variable for the connection string.
        String connectionUrl = args[0];
        String sqlQuery = args[1];
        try ( Connection conn = DriverManager.getConnection(connectionUrl); ) { 

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));

            try (Statement st = conn.createStatement();) {
                ResultSet resultSet = st.executeQuery(sqlQuery);
                CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader(resultSet));
                csvPrinter.printRecords(resultSet);
                csvPrinter.close();
            }
        }
        catch (SQLException e) {
            e.printStackTrace();
            System.exit(1);
        }
        catch (IllegalArgumentException ie) {
            System.err.println(ie.getMessage());
            System.exit(1);
        }
    }
}