我想生成一个包含2张纸的xlsx,一张用于经理数据,另一张用于员工数据。 一切顺利,但是当我打开文件时,两张纸都包含相同的数据。
这是我的代码:
private PreparedStatement createStmt() {
return conn.prepareStatement("SELECT * FROM WORK_PEOPLE");
}
PreparedStatement prepStmtMan = createStmt();
PreparedStatement prepStmtEmp = createStmt();
File fileDest = new File(this.outReportFolder.getAbsolutePath(), "report_2019.xlsx");
MempoiSheet sheet1 = MempoiSheetBuilder.aMempoiSheet()
.withSheetName("Mans")
.withPrepStmt(prepStmtMan)
.build();
MempoiSheet sheet2 = MempoiSheetBuilder.aMempoiSheet()
.withSheetName("Emps")
.withPrepStmt(prepStmtEmp)
.build();
MempoiBuilder.aMemPOI()
.withDebug(true)
.withFile(fileDest)
.withAdjustColumnWidth(true)
.addMempoiSheet(sheet1)
.addMempoiSheet(sheet2)
.withStyleTemplate(new SummerStyleTemplate())
.build()
.prepareMempoiReportToByteArray()
.get();
答案 0 :(得分:0)
您可以向DBMS指定要通过语句获取哪些数据。现在,您有一个语句"SELECT * FROM WORK_PEOPLE"
,该语句检索所有WORK_PEOPLE
数据。但是您需要2组数据(一组用于EMP,一组用于MAN),因此您将需要2条语句。
根据您的数据库模型,您应该为每个工作表选择数据
示例
如果每张纸的数据在同一张表中,并且用区分符分隔(本示例中为type
)
PreparedStatement prepStmtMan = createStmt("EMP");
PreparedStatement prepStmtEmp = createStmt("MAN");
private PreparedStatement createStmt(String type) {
// Create a statement that select data from the WORK_PEOPLE table by TYPE column
PreparedStatement prepStmt = conn.prepareStatement("SELECT * FROM WORK_PEOPLE WHERE TYPE = ?");
// Set the specific TYPE to the statement
prepStmt.setString(1, type);
return prepStmt;
}
以上声明将
SELECT * FROM WORK_PEOPLE WHERE TYPE = EMP
将提供所有类型为EMP的WORK_PEOPLE SELECT * FROM WORK_PEOPLE WHERE TYPE = MAN
将提供所有类型为MAN 为了更好地了解Prepared Statements,并且还可以使用基本的 SQL 教程