按名称对 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));
}
#未测试
我正在使用 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));
}
#未测试