ResultSet以CSV格式返回空白列

时间:2016-09-02 09:34:24

标签: java postgresql jooq opencsv

我正在使用JOOQ和Postgres。 在Postgres中,我有一个列性别

 'gender' AS gender,

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

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

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

所有看起来都很好,如果打印出值,那么它们都是正确的。 但是,当我在skillRecord上调用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中的所有columsn都按预期返回,但性别列除外,该列的标题为“性别”,但列值为空。 我在上面的代码中有必要的尝试/捕获但我为了简洁而排除了它们。

2 个答案:

答案 0 :(得分:1)

*男性中的星号

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

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

答案 1 :(得分:1)

<强>解决方案

所以我找到了解决方案。如果我有类似的话,那就是postgres:

'gender' AS gender,

类型未知,而非文字。所以解决方案是定义为:

&#39;性别&#39; ::文字AS性别

这样做之后,OpenCSV很高兴。