我正在尝试将ResultSet对象转换为CSV格式的String对象。我曾尝试使用OpenCV将其转换为CSV文件,但我需要将其作为字符串。有一个选项可以先将其转换为文件,然后将数据转换为字符串,然后删除该文件,但这将是我无法承担的额外开销。
有没有办法实现它,我尝试搜索但到目前为止没有任何东西。
答案 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)
或者,您可以使用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);
}
}
}