按名称对 table 排序并将名称显示在 table 的顶部

Sort table by name and display the name on top of the table

我正在使用 itextpdf 来显示我的 SQL 查询的结果(这不是实际的查询,我只是让它更简单):

SELECT ID, NAME, AGE from CUSTOMERS ORDER BY NAME;

我一直在尝试根据名为“名称”的列分隔结果并将其显示在 table 之上,如下所示:

Mark
ID      |    Age
1111          21
2222          22
3333          23

John
ID      |  Age
4444        24
5555        25
6666        26

我唯一能做的就是硬编码,可能是这样的:

// Display Name on top of the table
while(rs.next()){
    String name = rs.getString(2);

    if(name.equals("Mark")){
        Paragraph name_Prgph = new Paragraph("Mark", header_Bold);
        name_Prgph.setAlignment(Element.ALIGN_LEFT);
        name_Prgph.setSpacingAfter(10);
        my_pdf_report.add(name_Prgph);
        break;
    }
}

// Table Header
rowHeader_Table.addCell(new Phrase("ID", header_Bold));
rowHeader_Table.addCell(new Phrase("NAME", header_Bold));
rowHeader_Table.addCell(new Phrase("AGE", header_Bold));

//Table Values
while(result.next()){
    String id_Values = result.getInt(1);
    String name_Values = result.getString(2);
    Integer age_Values = result.getInt(3);

    if(name_Values.equals("Mark")){
                                    
        a.addCell(new Phrase(Integer.toString(id_Values), normalFont));
        a.addCell(new Phrase(Integer.toString(age_Values), normalFont));
    }
}

编辑:我刚刚了解到您不能使用 resultset.next() 两次...

像这样使用 java 集合:-

List<String> names = new ArrayList<>();

// Display Name on top of the table
while(rs.next()){
    String name = rs.getString(2);

    if (!names.contains(name)){
        names.add(name);
        Paragraph name_Prgph = new Paragraph(name, header_Bold);
        name_Prgph.setAlignment(Element.ALIGN_LEFT);
        name_Prgph.setSpacingAfter(10);
        my_pdf_report.add(name_Prgph);
       // Table Header
       rowHeader_Table.addCell(new Phrase("ID", header_Bold));
       rowHeader_Table.addCell(new Phrase("AGE", header_Bold));
    }
    //Add values
    String id_Values = result.getInt(1);
    Integer age_Values = result.getInt(3);
                                    
    a.addCell(new Phrase(Integer.toString(id_Values), normalFont));
    a.addCell(new Phrase(Integer.toString(age_Values), normalFont));

}

#未测试