ResultSet返回CSV格式的空列



我正在使用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));
        }

所有看起来都很好,如果打印的值都是正确的。但是,当我在skillsRecord上调用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

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

解决方案:

所以我找到了解决办法。在postgres中,如果我有如下内容:

'gender' AS gender,
未知

类型是,不是文本。所以解决方案是定义为:

'gender'::text AS gender

这样做之后,OpenCSV很高兴。

相关内容

  • 没有找到相关文章

最新更新