Java 在Univocity解析器中将结果集格式化为特定的DecimalFormat

Java 在Univocity解析器中将结果集格式化为特定的DecimalFormat,java,univocity,Java,Univocity,在我的项目中,我一直在使用Univocity解析器将SQL查询转换为CSV文件。 它首先将查询映射到javabean,然后使用CsvRoutines编写CSV public static class Bean { @Parsed(field = "double_value") public Double doubleValue; public Bean(Double doubleValue) { this.doubleValue =

在我的项目中,我一直在使用
Univocity解析器
将SQL查询转换为CSV文件。 它首先将查询映射到
javabean
,然后使用
CsvRoutines
编写CSV

public static class Bean {
    @Parsed(field = "double_value")
    public Double doubleValue;

    public Bean(Double doubleValue) {
        this.doubleValue = doubleValue;
    }
}

@Test
public void writeToCsv() {
    List<Bean> beans = List.of(new Bean(10.0), new Bean(50.5), new Bean(12.0));
    CsvRoutines csvRoutines = new CsvRoutines();
    StringWriter stringWriter = new StringWriter();
    csvRoutines.writeAll(beans, Bean.class, stringWriter);
    System.out.println(stringWriter);
}
现在我正在重构一种更通用的方法,将
ResultSet
直接转储到
CsvRoutines
中。 与上述示例类似,我在Postgres中制作了一个小表格:

create table bean(
    double_value numeric
);
insert into bean values (10), (50.5), (12);

@Test
public void writeToCsv() throws SQLException {
    Connection c = createJdbcConnection();
    PreparedStatement stmt = c.prepareStatement("select double_value from bean");
    ResultSet rs = stmt.executeQuery();

    CsvRoutines csvRoutines = createCsvRoutines();
    StringWriter stringWriter = new StringWriter();
    csvRoutines.write(rs, stringWriter);
    System.out.println(stringWriter);
}
现在,结果并不总是包含十进制数

10
50.5
12
出于兼容性原因,我希望它能产生与初始版本完全相同的输出。 我已尝试配置自定义
ObjectRowWriterProcessor
,但它的格式似乎不正确

private CsvRoutines createCsvRoutines() {
    CsvWriterSettings writerSettings = new CsvWriterSettings();
    ObjectRowWriterProcessor rowProcessor = new ObjectRowWriterProcessor();
    rowProcessor.convertType(Double.class, Conversions.formatToNumber("0.0"));
    writerSettings.setRowWriterProcessor(rowProcessor);
    return new CsvRoutines(writerSettings);
}

如何将
CsvRoutines
配置为始终像最初一样以
0.0
格式写入?

看起来像
ObjectRowWriterProcessor
方法工作正常,但运行时的类型是
BigDecimal
而不是
Double

因此,更改以下行确实会产生所需的结果:

rowProcessor.convertType(BigDecimal.class, Conversions.formatToNumber("0.0"));
rowProcessor.convertType(BigDecimal.class, Conversions.formatToNumber("0.0"));