jsp+servlet+form表单+Hutool工具实现excel表格导入功能

效果图:

upload

准备工作:

1、要用到Hutool工具肯定要有它的jar包。jar包下载地址: hutool-all-5.8.10.jar
感兴趣可以去了解一下Hutool的官网Hutool官网
hutool-all-5.8.10.jar2、准备一张需要上传的Excel表。这张表我相信应该和你的数据库字段基本都一样。这下面是我的表和数据库字段。

Excel表:
在这里插入图片描述

数据库字段:
在这里插入图片描述

执行步骤

1、导入刚刚下载的 hutool-all-5.8.10.jar到lib目录下。
在这里插入图片描述
2、写jsp页面代码:注意form表单后面必须要加enctype="multipart/form-data"

<form action="${pageContext.request.contextPath}/excel?method=customerImport" method="post" enctype="multipart/form-data">
            <input type="file" name="customerImport">
            <input type="submit" value="导入">
</form>

3、写servle层代码:
注意:servlet层需要加@MultipartConfig注解
在这里插入图片描述
在写servlet层之前先了解Hutool工具关于处理Excel表格的几个方法。
1) 从流中读取Excel为ExcelReader(比如从ClassPath中读取Excel文件)

ExcelReader reader = ExcelUtil.getReader(ResourceUtil.getStream("aaa.xlsx"));

2) 读取指定的sheet

ExcelReader reader;

//通过sheet编号获取
reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"), 0);
//通过sheet名获取
reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"), "sheet1");

3)读取为Map列表,默认第一行为标题行,Map中的key为标题,value为标题对应的单元格值。

ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");
List<Map<String,Object>> readAll = reader.readAll();

4)UUID全称通用唯一识别码(universally unique identifier),JDK通过java.util.UUID提供了 Leach-Salz 变体的封装。在Hutool中,生成一个UUID字符串方法如下:

//生成的UUID是带-的字符串,类似于:a5c8a5e8-df2b-4706-bea4-08d0939410e3
String uuid = IdUtil.randomUUID();

//生成的是不带-的字符串,类似于:b17f24ff026d40949c85a24f4f375d42
String simpleUUID = IdUtil.simpleUUID();

以上方法按需灵活运用,具体更多方法可查看Hutool官网。
servlet层代码:

private void customerImport(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        // 得到file内容,但不是你想要的那种数据格式
        Part part = request.getPart("customerImport");

        if (part.getSize()>0 && null != part){

            InputStream in = part.getInputStream();

            // Hutool工具包自带方法 ExcelUtil
            ExcelReader reader = ExcelUtil.getReader(in,0);

            //这里才是你想要的数据集
            List<Map<String, Object>> mapList = reader.readAll();
            for (Map<String,Object> map:mapList){
                Customer customer = new Customer();

                //让id自动生成(Hutool工具包自带函数)
                String id = IdUtil.simpleUUID();
                customer.setId(id);
                customer.setName((String) map.get("姓名"));
                customer.setSex((String) map.get("性别"));
                customer.setBirthday((String) map.get("出生日期"));

                String provinceName =(String) map.get("省份");
                Province province = provinceService.findByName(provinceName);
                customer.setProvince(province);

                String cityName =(String) map.get("城市");
                City city = cityService.findByName(cityName);
                customer.setCity(city);

                customer.setPhone((String) map.get("电话"));
                customer.setEmail((String) map.get("邮箱"));
                customer.setHobby((String) map.get("兴趣"));
                customer.setAddress((String) map.get("地址"));
                customer.setWechat((String) map.get("微信"));
                customer.setQq((String) map.get("QQ"));
                customer.setDescription((String) map.get("描述"));
                customer.setPhoto((String) map.get("图片"));

                // 获取当前时间(方法自己写的,非系统只带)
                String currentTime = DateUtil.getCurrentTime();
                customer.setCreateTime(currentTime);

                // 调用插入方法
                customerService.save(customer);
            }

            in.close();
            response.sendRedirect(request.getContextPath()+"/customer?method=list");
        } else {
            PrintWriter writer = response.getWriter();
            writer.write("<script>alert('请先选择文件再导入!!'); window.location.href='/customer?method=list' ;window.close();</script>");
            response.getWriter().flush();
        }
    }

4、dao层代码:

@Override
    public void save(Customer customer) {
        con = JDBCUtil.getConnection();
        String sql = "insert into customer values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        try {
            ptmt = con.prepareStatement(sql);
            ptmt.setString(1,customer.getId());
            ptmt.setString(2,customer.getName());
            ptmt.setString(3,customer.getSex());
            ptmt.setString(4,customer.getBirthday());
            ptmt.setString(5,customer.getProvince().getId());
            ptmt.setString(6,customer.getCity().getId());
            ptmt.setString(7,customer.getPhone());
            ptmt.setString(8,customer.getEmail());
            ptmt.setString(9,customer.getHobby());
            ptmt.setString(10,customer.getAddress());
            ptmt.setString(11,customer.getWechat());
            ptmt.setString(12,customer.getQq());
            ptmt.setString(13,customer.getDescription());
            ptmt.setString(14,customer.getPhoto());
            ptmt.setString(15,customer.getCreateTime());
            ptmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.closeAll(rs,ptmt,con);
        }
结束语:

学有所得,方可谓之学也!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值