我正在使用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都按预期返回,但性别列除外,该列的标题为“性别”,但列值为空。 我在上面的代码中有必要的尝试/捕获但我为了简洁而排除了它们。
答案 0 :(得分:1)
您在ResultSet.toString()
输出(或Result.toString()
)中看到的星号反映了记录的内部Record.changed(Field)
标记,即每条记录上的信息表明记录在之后被修改从数据库中检索到它(你做过)。
这只是您可以放心忽略的视觉信息。
答案 1 :(得分:1)
<强>解决方案强>:
所以我找到了解决方案。如果我有类似的话,那就是postgres:
'gender' AS gender,
类型未知,而非文字。所以解决方案是定义为:
&#39;性别&#39; ::文字AS性别
这样做之后,OpenCSV很高兴。