I'm using Univocity for converting Resultset to String in CSV format using below code:
StringWriter stringWriter = new StringWriter();
CsvWriterSettings csvWriterSettings = new CsvWriterSettings();
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
String headers[] = new String[columnCount];
for (int i = 0; i < columnCount; i++) {
headers[i] = metaData.getColumnLabel(i + 1);
}
for (int i = 0; i < headers.length; i++) {
if (fieldMapping != null && fieldMapping.containsKey(headers[i])) {
headers[i] = fieldMapping.get(headers[i]);
}
}
csvWriterSettings.setHeaders(headers);
csvWriterSettings.setHeaderWritingEnabled(true);
if (csvSeparator != null) {
csvWriterSettings.getFormat().setDelimiter(csvSeparator.charAt(0));
}
if (isQuoteFields) {
csvWriterSettings.setQuoteAllFields(true);
}
if (isCStyleEscape) {
csvWriterSettings.getFormat().setQuoteEscape(',');
csvWriterSettings.getFormat().setCharToEscapeQuoteEscaping('\\');
}
CsvRoutines csvRoutines = new CsvRoutines(csvWriterSettings);
csvRoutines.write(resultSet, stringWriter);
return stringWriter.toString();
I'm trying to set custom headers in the output, but the returned output always has a default header.
Is there any way I could set my own headers values in the output csv format string.
It's a bug and I just opened a bug report here) so this will work out of the box in version 2.5.0+. Currently there's a workaround for it:
Set the headers you want first:
String headers[] = {"My", "Custom", "Header"};
csvWriterSettings.setHeaders(headers);
Write a single row with your headers to your output:
CsvWriter headerWriter = new CsvWriter(stringWriter, csvWriterSettings);
headerWriter.writeRow(headers);
Dump the ResultSet
:
CsvRoutines csvRoutines = new CsvRoutines(csvWriterSettings);
csvRoutines.write(resultSet, stringWriter);
Close that writer you created to generate the headers:
headerWriter.close();
Hope this helps.