我正在使用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很高兴。