将JTable导出为Excel文件

在这里我试图出口JTable到Excel文件…我没有得到任何错误控制台…但在Excel表格我只有列名…我的目标是要显示数据库表在这个JTable广场,在这个下面有Exportbutton,所以点击这个button后应该为上面的JTable创buildexcel文件。

所以不能识别实际的错误

JButton btnExport = new JButton("Export"); btnExport.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { String query="Select * from client"; PreparedStatement pst=conn.prepareStatement(query); ResultSet rs=pst.executeQuery(); table.setModel(DbUtils.resultSetToTableModel(rs)); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("Excel Sheet"); HSSFRow rowhead = sheet.createRow(0); rowhead.createCell(0).setCellValue("Client_Vendor code"); rowhead.createCell(1).setCellValue("Client_Name"); rowhead.createCell(2).setCellValue("Purchaser_Name"); rowhead.createCell(3).setCellValue("User_Name"); rowhead.createCell(4).setCellValue("Sales_Engg"); int index=1; while(rs.next()) { HSSFRow row = sheet.createRow(index); row.createCell(0).setCellValue(rs.getInt(1)); row.createCell(1).setCellValue(rs.getString(2)); row.createCell(2).setCellValue(rs.getString(3)); row.createCell(3).setCellValue(rs.getString(4)); row.createCell(4).setCellValue(rs.getString(5)); index++; } FileOutputStream fileOut = new FileOutputStream("e:/CLIENTDATA/client.xlsx"); wb.write(fileOut); fileOut.close(); System.out.println("Data is saved in excel file."); } catch (Exception e) { e.printStackTrace(); } 

所以你的问题就在这里

 table.setModel(DbUtils.resultSetToTableModel(rs)); 

DBUtils正在读取到ResultSet的末尾,意思是当你调用rs.next() ,它返回false ,因为没有更多的数据

你有两个妓女

你可以…

调用ResultSet#beforeFirst ,但这是所有数据库支持,并可能有性能问题

你可以…

停止使用DBUtils并手动构buildTableModel 。 首先看看如何使用表格来了解更多细节

 ResultSet rs = pst.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("Excel Sheet"); HSSFRow rowhead = sheet.createRow(0); DefaultTableModel model = new DefaultTableModel(); for (int col = 0; col < columnCount; col++) { String columnName = rsmd.getColumnName(col + 1); model.addColumn(columnName); rowhead.createCell(col).setCellValue(columnName); } int index = 1; while (rs.next()) { Vector tableRow = new Vector(columnCount); HSSFRow row = sheet.createRow(index); for (int col = 0; col < columnCount; col++) { Object value = rs.getObject(col + 1); if (value instanceof Integer) { row.createCell(col).setCellValue((int) value); tableRow.add((int) value); } else { row.createCell(col).setCellValue(value.toString()); tableRow.add(value.toString()); } } model.addRow(tableRow); } try (FileOutputStream fileOut = new FileOutputStream("e:/CLIENTDATA/client.xlsx")) { wb.write(fileOut); } 

我也build议看一下JDBC数据库访问和try-with-resources语句