将记录从数据库转储为CSV格式的文件

时间:2018-08-20 08:35:44

标签: java sql jooq

我正在使用i18n从数据库读取并将记录转储到File中。 我想转储CSV格式的记录,并在每条记录之间换行。我调查了Jooq并在Google上进行了研究,但没有找到任何帮助。 Jooq Docs支持Jooq,但如何在我的用例中合并该功能。

我正在使用以下代码将记录转储到文件中:

CSV format

2 个答案:

答案 0 :(得分:1)

使用CSVFormat.newline()属性:

String csv = results.formatCSV(new CSVFormat().newline("\n\n"));

或者,由于您要基于行子集迭代光标,因此您可能也想删除标题:

String csv = results.formatCSV(new CSVFormat().newline("\n\n").header(false));

这还将在末尾产生两个尾随的换行符,如果不需要,可以轻松删除它们:

csv = csv.trim();

答案 1 :(得分:0)

您可以直接从Result<Record> results格式化记录,而无需手动遍历每条记录。

唯一的事情是,由于您要分批提取MAX_FETCH_SIZE中的记录,因此每批格式化的csv将包含标头,因此您可能只需要在第一批中写标头。

@Cleanup Cursor<Record> cursor = query.fetchSize(2).fetchLazy();

boolean includeHeaders = true;
int dataStartIndex = 0;

while(cursor.hasNext()){

    Result<Record> results = cursor.fetchNext(2);
    String csv = results.formatCSV();

    if (includeHeaders) {
        writer.write(csv);
        dataStartIndex = csv.indexOf('\n') + 1;
        includeHeaders = false;
        continue;
    }

    writer.write(csv.substring(dataStartIndex));
}