所以我的 jsp 文件中有一个表单,当我单击按钮时,我希望它执行 sql 查询并将结果转换为 s csv 文件,然后下载。我通过 servlet 执行此操作,我遇到的问题是,在下载的 csv 文件中,我得到的是“com.opencsv.CSVWriter@771aa22”而不是我的查询
这是有问题的 doGet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String sql QueryConstant.CFOUSERQUERY;
Connection conn =null;
Statement stmt = null;
ResultSet rs = null;
String csvResult="";
try{
ConnectionManager connMan= GFOServer.GetGoldInt.ConnectionManager();
conn connMan.allocateConnection();
stmt. conn.createStatement();
rs=stmt.executeQuery(sql);
CSVWriter writer new CSVWriter(new FileWriter("CFOUserQueryReport.csv"));
writer.writeall (rs, true);
csvResult= writer.toString();
writer.close();
connMan.closeStatement(stmt);
connMan.closeResultSet(rs);
connMan.deallocateConnection(conn);
response.setContentType("text/csv");
response.setHeader("Content-disposition", "attachment: filename CFOUserQueryReport.csv");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Expires", "-1");
response.getOutputStream().write(csvResult.getBytes());
} catch (Exception e) {
e.getMessage();
}
}
此行不正确:
csvResult = writer.toString();
toString()
上的 Writer
方法是从 toString
继承的 java.lang.Object
方法。 这会产生您看到的字符串。
writer
是一个 FileWriter
并且 FileWriter
上没有任何方法可以为您提供写入文件的内容;即在 writeAll
通话中。
如果您需要以字符串形式写入文件的 CSV,您可以:
StringWriter
,或者Files.readString(Path)
,或