java代码实现将数据库中的表格下载到电脑中

需求:用户点击浏览器中的链接,可以把数据库中的表格下载到自己电脑中

一.数据库准备:

数据库中需要准备一张表格

二.后端准备:

service层和mapper中需要有查询所有或者分页查询的方法,可用表现层调用

三:前端准备:

有一个链接可供用户点击

四.代码实现

 private void getExcel(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        //获取分页查询的参数
        String rows = request.getParameter("rows");
        String currentPageStr = request.getParameter("currentPage");
        //这句话的作用是:点击链接时可以直接下载
        response.setHeader("content-disposition","attachment;filename=Puser.xls");
        //创建表格
        Workbook wb=new HSSFWorkbook();
        //创建工作空间
        Sheet sheet = wb.createSheet();
        //分页查询user
        UserService userService=new UserServiceImpl();
        Pagebean<User> page = userService.findUserByPage(Integer.valueOf(currentPageStr), Integer.valueOf(rows));
        List<User> list = page.getList();
        //把数据填充到表格中
        //第一行
        Row row = sheet.createRow(0);
        row.createCell(0).setCellValue("id");
        row.createCell(1).setCellValue("用户名");
        row.createCell(2).setCellValue("真实姓名");
        row.createCell(3).setCellValue("邮箱");
        row.createCell(4).setCellValue("qq");
        row.createCell(5).setCellValue("手机");
       // row.createCell(6).setCellValue("注册时间");
        //for循环填充数据
        for(int i=0;i<list.size();i++){
            User user = list.get(i);

            Row row1 = sheet.createRow(i + 1);
            row1.createCell(0).setCellValue(user.getId());
            row1.createCell(1).setCellValue(user.getUsername());
            row1.createCell(2).setCellValue(user.getRealname());
            row1.createCell(3).setCellValue(user.getEmail());
            row1.createCell(4).setCellValue(user.getQq());
            row1.createCell(5).setCellValue(user.getPhone());
        }
        //把表格下载到内存
        //把list写出到excel中
        String realPath = getServletContext().getRealPath("Puser.xls");
        File file = new File(realPath);
        FileOutputStream fos=new FileOutputStream(file);
        //写入服务器
        wb.write(fos);
        //先读到内存,再写出去
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
        ServletOutputStream outputStream = response.getOutputStream();
        byte[] bytes=new byte[1024];
        int len=0;
        while ((len=bis.read(bytes))!=-1){
            outputStream.write(bytes,0,len);
        }
        outputStream.flush();
        outputStream.close();

    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值