Измените формат даты по умолчанию при экспорте данных набора результатов с помощью OpenCSV.

Я пытаюсь экспортировать данные в CSV, используя OpenCSV.

База данных - это Universe Db, а CSV отлично генерируется с "$" в качестве разделителя.

Однако, когда мы попытались загрузить те же данные CSV в базу данных IBM DB2, это не удалось из-за несовместимого формата даты (т.е. DD-MMM-YYYY), поскольку IBM DB2 не поддерживает этот формат.

Код для создания CSV:

private CSVWriter writer; 
writer = new CSVWriter(new OutputStreamWriter(new FileOutputStream(savePath + "\\" + tableName+ ".csv"),"UTF-8"), '$',CSVWriter.NO_QUOTE_CHARACTER); 
writer.writeAll(rs, false); //rs is the resultset returned for the select query 
writer.flush(); 

Мы загружаем csv с помощью команды DB2 load & imp.

Как изменить формат даты по умолчанию при создании CSV?

Цель действия: загрузить данные из базы данных Universe в базу данных IBM DB2.

Примечание. Universe DB не поддерживает обновление набора результатов, поэтому этот вариант не принимался во внимание :)


person Nilesh Wattamwar    schedule 02.11.2015    source источник


Ответы (2)


Попробуйте использовать пользовательский ResultSetHelperService :

String filemane = "export.csv";
CSVWriter csvWriter = new CSVWriter(new FileWriter(filename));
ResultSetHelperService resultService = new ResultSetHelperService();
resultService.setDateFormat("yyyy-MM-dd");
resultService.setDateTimeFormat("yyyy-MM-dd HH:mm:ss");
csvWriter.setResultService(resultService);
person Michel Diemer    schedule 02.05.2020

В настоящее время в основной сборке openCSV есть изменения в ResultSetHelperService, позволяющие вам устанавливать форматы даты и даты и времени в желаемом формате, а затем вы можете вызвать setResultSetHelper в CSVWriter, который вы создаете, перед обработкой набора результатов.

Они войдут в сборку 3.6, выход которой намечен на ближайшие пару недель (я просто жду, когда основной участник этого релиза вернется из медового месяца).

person Scott Conway    schedule 02.11.2015
comment
Должно быть, это классная функция, которую я тоже давно жду.. :) :) как я узнаю о выпуске версии OpenCSV 3.6? - person Nilesh Wattamwar; 03.11.2015
comment
Либо на странице sourceforge — sourceforge.net/projects/opencsv, либо вы можете проверить центральный репозиторий maven - search.maven.org/ Я публикую сообщения в один и тот же день. Я также стараюсь обновлять вики, чтобы вы могли проверить там. sourceforge.net/p/opencsv/wiki/What%27s%20new или sourceforge.net/p/opencsv/news - person Scott Conway; 03.11.2015
comment
Будет очень полезно, если вы поделитесь примером использования ResultSetHelperService и setResultSetHelper в контексте обработки даты при записи в csv. - person Nilesh Wattamwar; 04.11.2015
comment
Я думал, что у меня есть хороший тест, показывающий как ResultSetHelperService, так и CSVWriter, но у меня были только отдельные тесты. Позже я постараюсь получить хороший интеграционный тест или обновить часто задаваемые вопросы, но сейчас, если вы использовали наборы результатов раньше с opencsv, то это не будет сильно отличаться. CSVWriter Writer = новый CSVWriter(somewriter); Служба ResultSetHelperService = new ResultSetHelperService(); service.setDateFormat(ГГГГММДД); service.setDateTimeFormat (ГГГГММДДЧЧммсс); писатель.setResultService(служба); 3.6 только сегодня вышла! - person Scott Conway; 08.11.2015