189 8069 5689

java怎么将Excel文件上载并把数据导入数据库

今天小编给大家分享一下java怎么将Excel文件上载并把数据导入数据库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的宣城网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

将Excel文件上载并把其中的数据导入数据库
  1. 前端借助jQuery-EasyUI来实现

在jquery-easyui-1.9.4/themes/icon.css文件尾部添加

.icon-import-excel{
  background:url('icons/ImportExcel.png') no-repeat center center;
}

上载图标 ImportExcel.png 在这里

  1. 前端代码及相关问题

  • 查看input表单控件(type=“file”)有没有获得文件名

  • java怎么将Excel文件上载并把数据导入数据库

  • input表单控件如下:

可以发现:

  1. 使用id名称(upload)接一个点可以引用js对象属性。

  2. 浏览器的console窗口就是个js shell,可以执行命令,甚至可以上下键翻取历史命令。

  • 前端示范代码



  
    
    jQuery EasyUI Demo for Java
    
    
    
    
    
    
    
    var url;

      function deleteUser() {
        var row = $('#dg').datagrid('getSelected');
        if (row) {
          $.messager.confirm("系统提示", "您确定要删除这条记录吗?", function(r) {
            if (r) {
              $.post('userDelete', {
                delId: row.id
              }, function(result) {
                if (result.success) {
                  $.messager.alert("系统提示", "已成功删除这条记录!");
                  $("#dg").datagrid("reload"); //刷新前端
                } else {
                  $.messager.alert("系统提示", result.errorMsg);
                }
              }, 'json');
            }
          });
        }
      }

      function newUser() {
        $("#dlg").dialog('open').dialog('setTitle', '添加用户');
        $('#fm').form('clear');
        url = 'userSave'; //Ajax发送至后端服务器
      }


      function editUser() {
        var row = $('#dg').datagrid('getSelected');
        if (row) {
          $("#dlg").dialog('open').dialog('setTitle', '编辑用户');
          $('#fm').form('load', row); //加载当前行的数据
          url = 'userSave?id=' + row.id; //Ajax发送至后端服务器
        }
      }


      function saveUser() {
        $('#fm').form('submit', {
          url: url, //Ajax发送至后端服务器对应的url
          onSubmit: function() {
            return $(this).form('validate');
          },
          success: function(result) {
            var result = eval('(' + result + ')'); //转化为前端JSON
            if (result.errorMsg) {
              $.messager.alert("系统提示", result.errorMsg);
              return;
            } else {
              $.messager.alert("系统提示", "保存成功");
              $('#dlg').dialog('close');
              $("#dg").datagrid("reload"); //刷新前端
            }
          }
        });
      }

      /*
       * ajax无法直接接收导出的excel。
       * 因为ajax只处理返回的字符流,而后端返回前端的excel是二进制的字节流,ajax无法处理。
       * 对于二进制的字节流只能交给浏览器来处理。
       */
      function exportUser() {
        var searchVal = $('#searchBox').val();
        console.log("查找关键字:" + searchVal);

        if (searchVal != "") {
          //使用window.open()方法,浏览器会“跳窗”,闪一下。
          //window.open("exportExcel?searchKey="+searchVal);
          window.location.href = "exportExcel?searchKey=" + searchVal;
        } else {
          //window.open("exportExcel");
          window.location.href = "exportExcel";
        }
      }

      function searchUser() {
        var searchVal = $('#searchBox').val();
        console.log("查找关键字:" + searchVal);
        if (searchVal != '') { //查找框有输入
          $('#dg').datagrid({
            url: 'userList',
            queryParams: {
              "searchVal": searchVal
            }
          });
        } else { //没有输入则全量显示
          $('#dg').datagrid({
            url: 'userList',
            queryParams: {}
          });
        }
      }

      function importUser() {
        $("#uploadDlg").dialog('open').dialog('setTitle', '批量导入数据');
      }

      function downloadTemplate() {
        //对应jsp&servlet项目(Dynamic Web Project)的WebContent/template/template.xls
        window.open('template/template.xls');
      }

      function uploadFile() {
        console.log("到uploadFile");
        $("#uploadForm").form("submit", {
          success: function(result) {
            //将JSON字符串转成JSON对象
            //var result = eval('(' + result + ')');
            result=JSON.parse(result); //注意:JSON.stringify()是将JSON对象转换为字符串,便于网络传输。
            if (result.errorMsg) {
              $.messager.alert("系统提示", result.errorMsg);
            } else {
              $.messager.alert("系统提示", "上传成功");
              $("#uploadDlg").dialog("close");
              $("#dg").datagrid("reload");
            }
          }
        });
      }
  
  
    
    
    
      
        
          编号
          姓名
          电话
          Email
          QQ
        
      
    

    
      
        添加用户         编辑用户         删除用户         批量导入       
      
                          搜索         导出用户       
    
                                            姓名:                                                联系电话:                                                Email:                                                QQ:                                             
           保存       关闭     
                                                                                                                                                   
下载模版:下载
上传文件:选择文件                                           
                       上传       关闭           $("#upload").change(function() {       var arrs = $(this).val().split('\\');       var filename = arrs[arrs.length - 1];       $("#fileShow").html(filename);     });

注意,最后和之间的jQuery代码等效于下边的代码:

$(document).ready(function() {
  $("#upload").change(function() {
      var arrs = $(this).val().split('\\');
      var filename = arrs[arrs.length - 1];
      $("#fileShow").html(filename);
  });
});
  1. 后端代码及相关内容

  • 工具类新增处理Excel单元格内容格式的代码

public class ExcelUtil {
  ......
  public static String formatCell(HSSFCell hssfCell) {
    if (hssfCell == null) {
      return "";
    }

    switch (hssfCell.getCellType()) {
    case BOOLEAN:
      return String.valueOf(hssfCell.getBooleanCellValue());
    case NUMERIC:
      DecimalFormat decimalFormat = new DecimalFormat("###################.###########");
      String str = decimalFormat.format(hssfCell.getNumericCellValue());
      System.out.println(str);
      return str;
    default:
      return String.valueOf(hssfCell.getStringCellValue());
    }
  }
}

这里可以保证double类型的整数没有小数点和其后的零。

  • 关于日期与字符串互转的工具类

public class DateUtil {

  // java.util.Date转换为String
  public static String formatDate(Date date, String format) {
    String result = "";
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    if (date != null) {
      result = sdf.format(date);
    }
    return result;
  }

  // String转换为java.util.Date
  public static Date formatString(String str, String format) throws Exception {
    if (StringUtil.isEmpty(str)) {
      return null;
    }
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    return sdf.parse(str);
  }

  // 取当前时间的字符串形式
  public static String getCurrentDateStr() throws Exception {
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
    return sdf.format(date);
  }
}
  • 配置web.xml


        uploadExcelServlet
        com.bee.web.UserUploadServlet
    

    
        uploadExcelServlet
        /fileUpload
    
  • 新增一个处理Excel文件上传的Servlet

package com.bee.web;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.util.Iterator;
import java.util.List;

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.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.FileItemFactory;
import org.apache.tomcat.util.http.fileupload.FileUploadException;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import org.apache.tomcat.util.http.fileupload.servlet.ServletRequestContext;

import com.bee.dao.UserDao;
import com.bee.model.User;
import com.bee.utils.DBUtil;
import com.bee.utils.DateUtil;
import com.bee.utils.ExcelUtil;
import com.bee.utils.ResponseUtil;

import net.sf.json.JSONObject;

public class UserUploadServlet extends HttpServlet {

  private static final long serialVersionUID = 1L;

  private DBUtil dbUtil = new DBUtil();
  private UserDao userDao = new UserDao();

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    doPost(request, response);
  }

  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);

    Iterator it = null;
    try {
      List items = upload.parseRequest(new ServletRequestContext(request));
      it = items.iterator();
    } catch (FileUploadException e1) {
      e1.printStackTrace();
    }

    String userUploadFile = null;

    while (it.hasNext()) {
      FileItem item = it.next();
      userUploadFile = item.getName();
      System.out.println("上载的文件:" + userUploadFile);
      if (!item.isFormField() && userUploadFile != null) { // 是上传的文件(二进制数据)
        try {
          // 取当前日期作为文件名,取上传文件的扩展名为服务器端存储文件的扩展名。
          String fileName = DateUtil.getCurrentDateStr();
          String extName = userUploadFile.split("\\.")[1];// java中由于转义\变\\
          // 在后端访问文件系统只能使用绝对路径
          String filePath = "e:/tmp/" + fileName + "." + extName;
          System.out.println("上传文件存储在这里 --> " + filePath);
          userUploadFile = filePath;

          item.write(new File(userUploadFile));
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }

    JSONObject result = new JSONObject();
    if (userUploadFile == null) {
      result.put("errorMsg", "我去,上传失败!");
      try {
        ResponseUtil.write(response, result);
      } catch (Exception e) {
        e.printStackTrace();
      }
      return;
    }

    POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(new File(userUploadFile)));
    HSSFWorkbook wb = new HSSFWorkbook(fs);
    HSSFSheet hssfSheet = wb.getSheetAt(0); // 获取第一个Sheet页
    if (hssfSheet != null) {
      for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) { // 第二行开始
        HSSFRow hssfRow = hssfSheet.getRow(rowNum);
        if (hssfRow == null) {
          continue;
        }
        // 用户的实体类(Entity/Model):POJO/DTO/JavaBean
        User user = new User();
        user.setName(ExcelUtil.formatCell(hssfRow.getCell(0)));
        user.setPhone(ExcelUtil.formatCell(hssfRow.getCell(1)));
        user.setEmail(ExcelUtil.formatCell(hssfRow.getCell(2)));
        user.setQq(ExcelUtil.formatCell(hssfRow.getCell(3)));
        Connection con = null;
        try {
          con = dbUtil.getConnection();
          userDao.userAdd(con, user);
        } catch (Exception e) {
          e.printStackTrace();
        } finally {
          dbUtil.closeConnection(con);
        }
      }
    }

    result.put("success", "true");
    try {
      ResponseUtil.write(response, result);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

以上就是“java怎么将Excel文件上载并把数据导入数据库”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注创新互联行业资讯频道。


标题名称:java怎么将Excel文件上载并把数据导入数据库
本文链接:http://jkwzsj.com/article/jhpcps.html