zoukankan      html  css  js  c++  java
  • jsp+servlet+poi导出数据库中的数据

    index.jsp:

    <a href="POIout">简单导出数据</a>

    <a href="POIoutTemplate">根据模板导出数据</a>

    package com.wp.poi;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    //连接数据库类
    public class DbUtil {
    
        private String dbUrl = "jdbc:mysql://localhost:3306/db_easyui";
        private String dbUserName = "root";
        private String dbPassword = "root";
        private String jdbcName = "com.mysql.jdbc.Driver";
    
        public Connection getCon() throws Exception {
            Class.forName(jdbcName);
            Connection con = DriverManager.getConnection(dbUrl, dbUserName,
                    dbPassword);
            return con;
        }
    
        public void closeCon(Connection con) throws Exception {
            if (con != null) {
                con.close();
            }
        }
    }
    package com.wp.poi;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    
    /**
     * 普通导出数据
     * 
     * @author admin
     * 
     */
    public class POIout extends HttpServlet {
    
        public POIout() {
            super();
        }
    
        public void init() throws ServletException {
        }
    
        public void destroy() {
            super.destroy();
        }
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doPost(request, response);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            response.setContentType("text/html;charset=utf-8");
            DbUtil dbUtil = new DbUtil();
            Connection conn = null;
            try {
                conn = dbUtil.getCon();// 获得数据库连接
                Workbook wb = new HSSFWorkbook();
                String headers[] = { "编号", "姓名", "电话", "Email", "QQ" };// 标题
                ResultSet rs = userList(conn);// 得到结果集
                fillExcelData(rs, wb, headers);
                export(response, wb, "导出数据.xls");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    dbUtil.closeCon(conn);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 查询数据库
         * 
         * @param con
         * @return ResultSet 返回结果集
         * @throws Exception
         */
        public ResultSet userList(Connection con) throws Exception {
            StringBuffer sb = new StringBuffer("select * from t_user");
            PreparedStatement pstmt = con.prepareStatement(sb.toString());
            return pstmt.executeQuery();
        }
    
        /**
         * 导出用户
         * 
         * @throws Exception
         */
        public void fillExcelData(ResultSet rs, Workbook wb, String[] headers)
                throws Exception {
            int rowIndex = 0; // 第一行
            Sheet sheet = wb.createSheet(); // 创建sheet页
            Row row = sheet.createRow(rowIndex++);
            // 创建标题
            for (int i = 0; i < headers.length; i++) {
                row.createCell(i).setCellValue(headers[i]);
            }
            // 导出数据库中的数据
            while (rs.next()) {
                row = sheet.createRow(rowIndex++);
                for (int i = 0; i < headers.length; i++) {
                    row.createCell(i).setCellValue(rs.getObject(i + 1).toString());
                    //rs.getObject(i + 1)得到一个对象,即数据库中一行的结果,每一列就是属性凑成一行变成对象。因为id是从1开始,所以要+1。
                }
            }
        }
    
        /**
         * 把数据放入到.xls文件中并下载到本地
         * 
         * @param response
         * @param wb
         * @param fileName
         * @throws Exception
         */
        public void export(HttpServletResponse response, Workbook wb,
                String fileName) throws Exception {
            response.setHeader("Content-Disposition", "attachment;filename="
                    + new String(fileName.getBytes("utf-8"), "iso8859-1"));// 设置头信息
            response.setContentType("application/ynd.ms-excel;charset=UTF-8");
            OutputStream out = response.getOutputStream();
            wb.write(out);// 进行输出,下载到本地
            out.flush();
            out.close();
        }
    }
    package com.wp.poi;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    
    /**
     * 利用模板导出数据
     * 
     * @author admin
     * 
     */
    public class POIoutTemplate extends HttpServlet {
    
        public POIoutTemplate() {
            super();
        }
    
        public void init() throws ServletException {
        }
    
        public void destroy() {
            super.destroy();
        }
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doPost(request, response);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            response.setContentType("text/html;charset=utf-8");
            DbUtil dbUtil = new DbUtil();
            Connection conn = null;
            try {
                conn = dbUtil.getCon();
                Workbook wb = fillExcelDataWithTemplate(userList(conn),
                        "Template.xls");
                export(response, wb, "利用模板导出的数据.xls");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    dbUtil.closeCon(conn);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 查询数据库
         * 
         * @param con
         * @return
         * @throws Exception
         */
        public ResultSet userList(Connection con) throws Exception {
            StringBuffer sb = new StringBuffer("select * from t_user");
            PreparedStatement pstmt = con.prepareStatement(sb.toString());
            return pstmt.executeQuery();
        }
    
        /**
         * 根据模板导出用户
         * 
         * @throws Exception
         */
        public Workbook fillExcelDataWithTemplate(ResultSet rs,
                String templateFileName) throws Exception {
            InputStream in = POIoutTemplate.class
                    .getResourceAsStream("/com/wp/poi/" + templateFileName);
            POIFSFileSystem fs = new POIFSFileSystem(in);// 解析Excel文件
            Workbook wb = new HSSFWorkbook(fs);// 以解析的excel文件格式进行创建
            Sheet sheet = wb.getSheetAt(0);
            // 获取列数
            int cellNums = sheet.getRow(0).getLastCellNum();
    
            int rowIndex = 1;// 从1开始的原因,模板的第一行固定了,所以从下一行开始
            while (rs.next()) {
                Row row = sheet.createRow(rowIndex++);
                for (int i = 0; i < cellNums; i++) {
                    row.createCell(i).setCellValue(rs.getObject(i + 1).toString());
                }
            }
            return wb;
        }
    
        /**
         * 导出
         * 
         * @param response
         * @param wb
         * @param fileName
         * @throws Exception
         */
        public static void export(HttpServletResponse response, Workbook wb,
                String fileName) throws Exception {
            response.setHeader("Content-Disposition", "attachment;filename="
                    + new String(fileName.getBytes("utf-8"), "iso8859-1"));
            response.setContentType("application/ynd.ms-excel;charset=UTF-8");
            OutputStream out = response.getOutputStream();
            wb.write(out);
            out.flush();
            out.close();
        }
    }

    模板:

    导出后:

    Java小生店铺:

    Pc端:http://shop125970977.taobao.com/index.htm

    手机端:搜索 java小生店铺

    希望店铺的资料能帮助到你!!!

     

  • 相关阅读:
    多进程或多线程实现并发
    linux服务器配置pyspider出现Could not run curl-config 的解决方式
    js的逆向解析
    修改linux终端命令行各字体颜色
    利用Centos服务器来搭建自己的splash,不再被安装的各种环境繁琐而担忧
    配置 Docker 加速器:适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1
    一分30秒 kali 开机显示 a start job is running for dev-disk 处理
    虚拟机Ubuntu16.04无法进入图形界面 The system is running in low-graphics mode
    vmware ubuntu硬盘空间不够用,空间扩展
    pip错误-failed to create process/fatal error in launcher
  • 原文地址:https://www.cnblogs.com/lirenzhujiu/p/5900545.html
Copyright © 2011-2022 走看看