Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ApachePOI将数据库查询结果导出到excel_Java_Database_Excel_Apache Poi - Fatal编程技术网

Java 使用ApachePOI将数据库查询结果导出到excel

Java 使用ApachePOI将数据库查询结果导出到excel,java,database,excel,apache-poi,Java,Database,Excel,Apache Poi,我通过一些示例代码使用ApachePOI将数据导出到excel。但是,我不确定如何将数据库查询结果导出到excel文件。我知道我们必须按行创建单元格,然后为单元格设置值。但是我在结果集中已经有了数据,必须将其导出到excel文件中。有人能给我一个小的/简单的代码来做同样的事情吗 谢谢 Try:Reference 示例人员表: +------------------+ | NAME | ADDRESS | +------------------+ | Jhone | USA |

我通过一些示例代码使用ApachePOI将数据导出到excel。但是,我不确定如何将数据库查询结果导出到excel文件。我知道我们必须按行创建单元格,然后为单元格设置值。但是我在结果集中已经有了数据,必须将其导出到excel文件中。有人能给我一个小的/简单的代码来做同样的事情吗

谢谢

Try:Reference

示例人员表:

+------------------+
| NAME  | ADDRESS  |
+------------------+
| Jhone | USA      |  
| Smith | USA      |
+------------------+
示例程序

Workbook wb = new HSSFWorkbook();
Sheet personSheet = wb.createSheet("PersonList");
Row headerRow = personSheet.createRow(0);
Cell nameHeaderCell = headerRow.createCell(0);
Cell addressHeaderCell = headerRow.createCell(1);

String sql = "select name, address from person_table";
PrepareStatement ps =  connection.prepareStatement(sql);
ResultSet resultSet = ps.executeQuery();    

int row = 1;
while(resultSet.next()) {
    String name = resultSet.getString("name");
    String address = resultSet.getString("address");

    Row dataRow = personSheet.createRow(row);

    Cell dataNameCell = dataRow.createCell(0);
    dataNameCell.setCellValue(name);

    Cell dataAddressCell = dataRow.createCell(1);
    dataAddressCell.setCellValue(address);

    row = row + 1;
}

String outputDirPath = "D:/PersonList.xls";
FileOutputStream fileOut = new FileOutputStream(outputDirPath);
wb.write(fileOut);
fileOut.close();
尝试:参考

示例人员表:

+------------------+
| NAME  | ADDRESS  |
+------------------+
| Jhone | USA      |  
| Smith | USA      |
+------------------+
示例程序

Workbook wb = new HSSFWorkbook();
Sheet personSheet = wb.createSheet("PersonList");
Row headerRow = personSheet.createRow(0);
Cell nameHeaderCell = headerRow.createCell(0);
Cell addressHeaderCell = headerRow.createCell(1);

String sql = "select name, address from person_table";
PrepareStatement ps =  connection.prepareStatement(sql);
ResultSet resultSet = ps.executeQuery();    

int row = 1;
while(resultSet.next()) {
    String name = resultSet.getString("name");
    String address = resultSet.getString("address");

    Row dataRow = personSheet.createRow(row);

    Cell dataNameCell = dataRow.createCell(0);
    dataNameCell.setCellValue(name);

    Cell dataAddressCell = dataRow.createCell(1);
    dataAddressCell.setCellValue(address);

    row = row + 1;
}

String outputDirPath = "D:/PersonList.xls";
FileOutputStream fileOut = new FileOutputStream(outputDirPath);
wb.write(fileOut);
fileOut.close();

对于HSSF格式,可以使用管道将数据库查询结果作为XML传递给POI序列化程序

这样做的优点是不会将数据库查询与POI API的调用纠缠在一起


我正在调查升级序列化程序以处理XSSF格式以克服最终speadsheet中64k行数限制所需的工作量。

对于HSSF格式,可以使用管道将数据库查询结果作为XML传递给POI序列化程序

这样做的优点是不会将数据库查询与POI API的调用纠缠在一起

我正在调查升级序列化程序以处理XSSF格式以克服最终speadsheet中64k行数限制所需的工作量。

如果您正在使用(或可以使用)SqlResultSet,则此解决方案适合您:

公共类ExcelReportExporter实现ReportExporter{
_行='_'下的私有静态最终字符;
私有静态最终字符空间=“”;
私有静态最终字符串后缀=“.xlsx”;
私有静态最终int TITLE_ROW=0;
私有静态最终整型标题_行=3;
私有静态最终整数结果第一行=标题行+1;
私有静态final int FIRST_COLUMN_INDEX=0;
@注入
查询发生器;
@注入
询问执行人;
@凌驾
公共文件导出(reportToExport)引发DraggerExportException{
字符串reportName=generateReportName(reportToExport);
SqlRowSet results=executor.executeQuery(生成器.generate(reportToExport.getQuery());
SqlRowSetMetaData resultsMetaData=results.getMetaData();
尝试(工作簿=新XSSFWorkbook();){
工作表=工作簿.createSheet(reportName);
createTitle(reportToExport、工作簿、工作表);
createHeaderRowFromMetadata(结果元数据、工作簿、工作表);
int excelRowIndex=createDataTableFromResultset(结果、结果元数据、工作簿、工作表);
setTableAutoFilter(结果元数据、工作表、excelRowIndex);
saveExcelFile(报告名、工作簿);
autoSizeColumns(结果元数据,工作表);
}捕获(IOE异常){
抛出新的DraggerExportException(“无法创建导出文件”,e);
}
返回新文件(reportName);
}
私有字符串generateReportName(reportToExport){
return reportToExport.getName().replace(空格,在_行下)+在_行下+LocalDate.now()+后缀;
}
私有void autoSizeColumns(SqlRowSetMetaData结果元数据,工作表){
对于(int i=FIRST_COLUMN_INDEX;i
如果您正在使用(或可以使用)SqlResultSet,则此解决方案适合您:

公共类ExcelReportExporter实现ReportExporter{
_行='_'下的私有静态最终字符;
私有静态最终字符空间=“”;
私有静态最终字符串后缀=“.xlsx”;
私有静态最终int TITLE_ROW=0;
私有静态最终整型标题_行=3;
私有静态最终整数结果第一行=标题行+1;
私有静态final int FIRST_COLUMN_INDEX=0;
@注入
查询发生器;
@注入
询问执行人;
@凌驾
公共文件导出(reportToExport)引发DraggerExportException{
字符串reportName=generateReportName(reportToExport);
SqlRowSet results=executor.execu