【问题标题】:ResultSet returns blank column in CSVResultSet 在 CSV 中返回空白列
【发布时间】:2016-09-02 20:01:51
【问题描述】:

我正在使用JOOQ 和 Postgres。 在 Postgres 中,我有一列 gender

 'gender' AS gender,

(表本身是一个视图,而性别列是一个占位符,用于在 Java 中计算的值)

在 Java 中,当我 .fetch() 视图时,我会对每条记录进行一些计算:

     for (Record r : skillRecords) {
            idNumber=function(r)
            r.set(id, idNumber);
            r.set(gender,getGender(idNumber));
        }

一切看起来都不错,如果 println 的值都是正确的。 但是,当我在我的技能记录上调用 intoResultSet() 时,性别列的所有值旁边都有一个星号,例如“*Male”。

然后,我使用结果集作为 OpenCSV CSV 编写器的输入,当我打开 CSV 时,性别列显示为空。

有什么建议吗?

更新:

根据 Lukas 关于星号的意见,我意识到问题可能出在 opencsv 上。

我的代码如下:

        File tempFile = new File("/tmp/file.csv");

        BufferedWriter out = new BufferedWriter(new FileWriter(tempFile));
        CSVWriter writer = new CSVWriter(out);
        //Code for getting records sits here
     for (Record r : skillRecords) {
        idNumber=function(r)
        r.set(id, idNumber);
        r.set(gender,getGender(idNumber));
    }
        writer.writeAll(skillRecords.intoResultSet(), true);
        return tempFile;

CSV 中的所有列都按预期返回,但性别列除外,该列具有标题“性别”但列值为空。 我在上面的代码中有必要的 try/catch,但为了简洁起见,我将它们排除在外。

【问题讨论】:

  • 我已经回答了与"*Male" 对应的部分。您介意在 OpenCSV 中添加更多关于 null 部分的信息吗?

标签: java postgresql jooq opencsv


【解决方案1】:

*Male 中的星号

您在ResultSet.toString() 输出(或Result.toString())中看到的星号反映了记录的内部Record.changed(Field) 标志,即每条记录的信息表明该记录在之后被修改> 它是从数据库中检索出来的(你这样做了)。

这只是您可以放心忽略的视觉信息。

【讨论】:

  • 非常感谢您的解释!用更多信息更新了我的答案
【解决方案2】:

解决方案

所以我找到了解决方案。如果我有类似的东西,结果是 postgres:

'gender' AS gender,

类型是unknown,而不是text。所以解决方案是定义为:

'gender'::text AS 性别

这样做之后,OpenCSV 很高兴。

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多