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

   2023-02-09 学习力0
核心提示:今天小编给大家分享一下java怎么将Excel文件上载并把数据导入数据库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。将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表单控件如下:

<input id="upload" type="file" name="userUploadFile" hidden />

可以发现:

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

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

  • 前端示范代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>jQuery EasyUI Demo for Java</title>
    <!-- 主题可以通过themes/下的easyui.css进行更换 -->
    <link rel="stylesheet" type="text/css" href="jquery-easyui-1.9.4/themes/ui-cupertino/easyui.css">
    <link rel="stylesheet" type="text/css" href="jquery-easyui-1.9.4/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="jquery-easyui-1.9.4/demo/demo.css">
    <script type="text/javascript" src="jquery-easyui-1.9.4/jquery.min.js"></script>
    <script type="text/javascript" src="jquery-easyui-1.9.4/jquery.easyui.min.js"></script>
    <script type="text/javascript" src="jquery-easyui-1.9.4/locale/easyui-lang-zh_CN.js"></script>
    <script type="text/javascript">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");
            }
          }
        });
      }</script>
  </head>
  <body>
    <!-- url属性表示要从Web服务器上请求数据,且与后端交互的是JSON串。交互通过Ajax(XHR)来完成。 -->
    <!-- 可以将jQuery EasyUI涉及到的组件都放在这个页面上统一调度。 -->
    <table id="dg" title="用户管理" class="easyui-datagrid"style="width:1024px;height:450px" url="userList" toolbar="#toolbar"
     pagination="true" rownumbers="true" fitColumns="true" singleSelect="true">
      <thead>
        <tr>
          <th field="id" width="50" hidden="true">编号</th>
          <th field="name" width="50">姓名</th>
          <th field="phone" width="50">电话</th>
          <th field="email" width="50">Email</th>
          <th field="qq" width="50">QQ</th>
        </tr>
      </thead>
    </table>

    <div id="toolbar">
      <div>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newUser()">添加用户</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editUser()">编辑用户</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="deleteUser()">删除用户</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-import-excel" plain="true" onclick="importUser()">批量导入</a>
      </div>
      <div>
        <!-- href=“javascript:void(0);”意为执行一个js的空方法,这样既执行了链接动作,页面又可以不跳转。 -->
        <input id="searchBox" type="text"style="border:#87CEFA 1px solid;" />
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-search" plain="true" onclick="searchUser()">搜索</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-export-excel" plain="true" onclick="exportUser()">导出用户</a>
      </div>
    </div>

    <div id="dlg" class="easyui-dialog"style="width:400px;height:250px;padding:10px 20px" closed="true" buttons="#dlg-buttons">
      <form id="fm" method="post">
        <table cellspacing="10px;">
          <tr>
            <td>姓名:</td>
            <td><input name="name" class="easyui-validatebox" required="true"style="width: 200px;"></td>
          </tr>
          <tr>
            <td>联系电话:</td>
            <td><input name="phone" class="easyui-validatebox" required="true"style="width: 200px;"></td>
          </tr>
          <tr>
            <td>Email:</td>
            <td><input name="email" class="easyui-validatebox" validType="email" required="true"style="width: 200px;"></td>
          </tr>
          <tr>
            <td>QQ:</td>
            <td><input name="qq" class="easyui-validatebox" required="true"style="width: 200px;"></td>
          </tr>
        </table>
      </form>
    </div>

    <div id="dlg-buttons">
      <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="saveUser()">保存</a>
      <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')">关闭</a>
    </div>

    <div id="uploadDlg" class="easyui-dialog"style="width:400px;height:180px;padding:10px 20px" closed="true" buttons="#upload-btns">
      <form id="uploadForm" action="fileUpload" method="post" enctype="multipart/form-data">
        <table>
          <tr>
            <td>下载模版:</td>
            <td><a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-download" onclick="downloadTemplate()">下载</a></td>
          </tr>
          <trstyle="height: 10px;">
          </tr>
          <tr>
            <td>上传文件:</td>
            <td><a href="javascript:$('#upload').click();" class="easyui-linkbutton" iconCls="icon-upload">选择文件</a>
              <input id="upload" type="file" name="userUploadFile" hidden />
              <span id="fileShow"></span>
            </td>
          </tr>
        </table>
      </form>
    </div>

    <div id="upload-btns">
      <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="uploadFile()">上传</a>
      <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#uploadDlg').dialog('close')">关闭</a>
    </div>
  </body>
  <script type="text/javascript">$("#upload").change(function() {
      var arrs = $(this).val().split('\\');
      var filename = arrs[arrs.length - 1];
      $("#fileShow").html(filename);
    });</script>
</html>

注意,最后</body>和</html>之间的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

<servlet>
        <servlet-name>uploadExcelServlet</servlet-name>
        <servlet-class>com.bee.web.UserUploadServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>uploadExcelServlet</servlet-name>
        <url-pattern>/fileUpload</url-pattern>
    </servlet-mapping>
  • 新增一个处理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<FileItem> it = null;
    try {
      List<FileItem> 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文件上载并把数据导入数据库”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注***行业资讯频道。

 
标签: excel java
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Perl操作Mysql数据库 perl操作excel
    一. 安装DBI模块步骤1:从TOOLS栏目中下载DBI.zip,下载完后用winzip解开到一个temp目录,共有三个文件:ReadmeDBI.ppdDBI.tar.gz步骤2: 在DOS窗口下,temp目录中运行下面的DOS命令:ppm install DBI.ppd 如果提示无效命令,可在perl/bin目录下运行 二. 安装DBD
    02-09
  • C#/VB.NET 获取Excel中图片所在的行、列坐标位置
    C#/VB.NET 获取Excel中图片所在的行、列坐标位
    本文以C#和vb.net代码示例展示如何来获取Excel工作表中图片的坐标位置。这里的坐标位置是指图片左上角顶点所在的单元格行和列位置,横坐标即顶点所在的第几列、纵坐标即顶点所在的第几行。下面是获取图片位置的详细方法及步骤。【程序环境】按照如下方法来引
    02-09
  • python 使用pandas,完成对excel的操作: 遍历
    excel有针对偏度的计算函数 skew(), 但是不清楚怎么使用excel进行遍历, 数据量很大。尝试使用python进行解决。第一次学习python,没想到了在克服安装各种包的难过之后,居然成功实现了。python3.3:#this is a test case# -*- coding: gbk -*-print("hello py
    02-09
  • Delphi操作Excel(2) ---Stringgrid导出到Excel
    最近编了一个小软件,需要将Stringgrid中的内容导出到Excel中。由于使用的是Delphi2010 + Office2010,中间有点小曲折,现把代码贴出来,供参考。代码procedure TFormMain.btn3Click(Sender: TObject);varExcelApp,workbook,sheet:Variant;begindlgSavedlg1.F
    02-09
  • csv,txt,excel文件之间的转换,perl脚本
    最近接触一些需要csv,txt,excel文件之间的转换,根据一些网上搜索加上自己的改动,实现自己想要的结果为主要目的,代码的出处已经找不到了,还请见谅,以下主要是针对csvexcel 和txtexcel写的perl脚本。主要用到的模块是: Text::CSVSpreadsheet::WriteExcel
    02-09
  • 使用Perl提取Excel中的IO_MUX perl处理excel内容
    使用Perl提取Excel中的IO_MUX perl处理excel内
    关键问题提取数据格式化输出循环嵌套数据结构构建坐标映射,逆向提取关键字描述在IC集成中,我们使用Excel表格规划设计的IC引脚功能映射需要转化到Verilog层次,这个过程耗时耗力,但其中有一些规律,可以通过Perl将其格式化提取出部分可用的信息,应用得当可
    02-09
  • MATLAB读写Excel文件中的数据
    读取:%读取filename文件中指定表的数据,存入dataRead矩阵中dataRead=xlsread('filename.xls',sheet); 写入:%将矩阵dataWrite中的数据写入filename表中,从C1单元格开始xlswrite('filename.xls',dataWrite','C1'); 作者:耑新新,发布于  博客园转载请
    02-09
  • R语言学习笔记之: 论如何正确把EXCEL文件喂给R
     博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html  ----前言: 应用背景兼吐槽继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯。这次的主题是论R与excel的结合,又称 论如何正确把EXCEL文件喂给R处理 分为: 1、 xlsx包安装及注
    02-09
  • R语言使用过程中出现的问题--读取EXCEL文件
    方法一:按照R导论中的方法,使用RODBC包,library(RODBC)channel-odbcConnectExcel("file.xlsx")da2-sqlFetch(channel,"Sheet1")odbcClose(channel)结果:未能成功,原因是odbcConnectExcel is only usable with 32-bit Windows 即只能在32位的电脑中使用,6
    02-09
  • [译] Ruby如何访问Excel文件
    [译] Ruby如何访问Excel文件
     BY: MATT NEDRICH   翻译:佣工7001     本文中,我将会评判几种Ruby语言访问Excel文件的库。我将要讨论针对不同格式的Excel文件访问的现有的几个Ruby库。本文中更多地聚焦于读取Excel文件,但是也对与更改/写入Excel文件稍作了些讨论。如果你迫不及
    02-09
点击排行