Java 利用poi把數據庫中數據導入Excel
效果:
使用時先把poi包導入工程的path,注意只需要導入poi包即可,下載后有三個jar包
核心代碼:
連接數據庫:DBConnection.java
package org.xg.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBConnection { private final String DBUrl ="jdbc:mysql://localhost:3306/notebook" ; private final String DBDriver ="com.mysql.jdbc.Driver" ; private final String username ="root" ; private final String password ="riskfitfeng" ; private Connection con ; public DBConnection() { try { Class.forName(DBDriver) ; con = DriverManager.getConnection(DBUrl,username,password) ; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public Connection getDB() { return con ; } public void closeDb(ResultSet rs,PreparedStatement ps) { if(rs!=null) { try { rs.close() ; } catch (SQLException e) { // TODO Auto-generated catch block
e.printStackTrace(); } } if(ps!=null) { try { ps.close() ; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
導入excel類:MySql2Excel.java
package org.xg.db; import java.io.FileOutputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.ResultSet; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class MySql2Excel { public MySql2Excel() throws Exception { Connection con = null ; DBConnection db = new DBConnection() ; con = db.getDB() ; String sql ="select * from students" ; ResultSet rs = con.createStatement().executeQuery(sql) ; // 獲取總列數 int CountColumnNum = rs.getMetaData().getColumnCount() ; int i =1 ; // 創建Excel文檔 HSSFWorkbook wb = new HSSFWorkbook() ; // sheet 對應一個工作頁 HSSFSheet sheet = wb.createSheet("student表中的數據") ; HSSFRow firstrow = sheet.createRow(0); //下標為0的行開始 HSSFCell[] firstcell = new HSSFCell[CountColumnNum]; String[] names = new String[CountColumnNum]; names[0] ="ID"; names[1] ="學號"; names[2] ="姓名"; names[3] ="性別"; names[4] ="班級"; for(int j= 0 ;j<CountColumnNum; j++){ firstcell[j] = firstrow.createCell((short)j); firstcell[j].setCellValue(new HSSFRichTextString(names[j])); } while(rs.next()) { // 創建電子表格的一行 HSSFRow row = sheet.createRow(i) ; // 下標為1的行開始 for(int j=0;j<CountColumnNum;j++) { // 在一行內循環 HSSFCell cell = row.createCell((short) j) ; // 設置表格的編碼集,使支持中文 //// 先判斷數據庫中的數據類型 // 將結果集里的值放入電子表格中 cell.setCellValue(new HSSFRichTextString(rs.getString(j+1))) ; } i++ ; } // 創建文件輸出流,准備輸出電子表格 OutputStream out = new FileOutputStream("E:\\person.xls") ; wb.write(out) ; out.close() ; System.out.println("數據庫導出成功") ; rs.close() ; con.close() ; } public static void main(String[] args) { try { @SuppressWarnings("unused") MySql2Excel excel = new MySql2Excel() ; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
例如你可以在前端jsp中這樣調用:
<a href="ReportServlet" onclick="return confirm('確認數據導出到E:/下?');">導出數據到Excel</a>
后台servlet寫上上面的代碼,注意最后需要response.sendRedirect("") 返回前端
源碼下載:
http://www.namipan.com/d/98cf9d03ab8f39ce3c107bb5b44b642dcb3ba581382a1400
poi包下載:
http://www.namipan.com/d/e0493749dd5e3a1f2e28a0a32493e5e026fae4aa1ac69c00