`

java 将Excel(CSV)导入数据库(上传、读取文件)

 
阅读更多

    最近由于项目的需要,必须使用Excel导入数据。

    经过一翻查找,确定了思路: 首先从客户端将文件上传到服务器,再有服务器读取,最后通过方法写入数据库。(更早的时候尝试过,在客户端获取文件的绝对路径,传传到 服务器端直接读取写入数据库。事实证明这种做法是不可取的。首先必须得很纠结得去获取路径,最关键是服务器是无法直接去操作客户端的文件。)在这之前的一个Flex项目中曾经写过WORD导出数据,那个时候也是分为两步,首先将文件导出到服务器端得文 件夹,再通过Flex所有的下载组件下载到客户端。

   上传时使用插件:commons-fileupload-1.2.jar

    读取Excel文件使用插件:jxl.jar

   上传页面:

   <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 <%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   <script type="text/javascript">
         $(function() {
    $('#custom_file_upload').uploadify({
      'uploader'       : 'map/js/jquery.uploadify-v2.1.4/uploadify.swf',
      'script'         : 'servlet/PlateTypeServlet',//所调用的servlet
      'cancelImg'      : 'map/js/jquery.uploadify-v2.1.4/cancel.png',
    //  'folder'         : '/uploads',
       //'fileDataName'   : 'uploadify',
      'multi'          : false,
      'auto'           : false,
      'fileExt'        : '*.jpg;*.csv;*.xls',
      'fileDesc'       : 'Image Files (.csv,.xls)',
      'queueID'        : 'custom-queue',
      'queueSizeLimit' : 1,
      'simUploadLimit' : 1,
      'buttonText': 'browse',
       'removeCompleted': true,
       'sizeLimit': 512000,
      'onSelectOnce'   : function(event,data) {
          $('#status-message').text(data.filesSelected + ' 份文件等待上传……');
        },
        //'onComplete' : function(evt, queueID, fileObj, response, data){
       //  $("#backImage").append("<div>"+response+"</div>");
       // },
      'onAllComplete'  : function(event,data) {
          $('#status-message').text(data.filesUploaded + ' 份文件已经上传, ' + data.errors + ' 错误.');
          getPlatec(1);
        }
    }); 
   });
    </script>
 <style type="text/css">
  #plan_ly_custom-queue {
   border: 1px solid #E5E5E5;
   height: 20px;
 margin-bottom: 10px;
   width: 280px;
 }
</style>
  </head>
<body>
<form id="plateinfo" method="post" enctype="multipart/form-data">
<table width="600" border="0" align="center" cellpadding="0" cellspacing="1" class="f12">
 
  <tr>
    <td>
      <table width="95%" border="0" align="center" cellpadding="5" cellspacing="0" class="f12">
        <tr>
          <td width="90" align="left" valign="bottom">EXCEL 内部数据样式:</td>
        
        </tr>
     
      </table>
      <table id="" width="93%" border="0" id="unit2" align="center" cellpadding="3" cellspacing="1" bgcolor="#B7BABC" class="f12">    
        
       <tr>
          <td align="center" bgcolor="#FFE6BF" class="f12"><strong>类型编码</strong></td>     
          <td align="center" bgcolor="#FFE6BF" class="f12"><strong>车牌类别</strong></td>
          <td align="center" bgcolor="#FFE6BF" class="f12"><strong>类型备注</strong>
        </td>
        </tr>
          
      <tr>   
            <td align="center" bgcolor="#FFFFFF" class="" style="cursor:pointer"  onclick="" title="">
              <input name="" type="text"  value="" size="22" />
            </td>
            <td align="center" bgcolor="#FFFFFF" class="" title="">
            <input name="" type="text"  value="" size="22" />  </td>
            <td align="center" bgcolor="#FFFFFF">
            <input name="" type="text"  value="" size="22" /> </td>
        </tr>
             <tr>   
            <td align="center" bgcolor="#FFFFFF" class="" style="cursor:pointer"  onclick="" title="">
              <input name="" type="text"  value="" size="22" />
            </td>
            <td align="center" bgcolor="#FFFFFF" class="" title="">
            <input name="" type="text"  value="" size="22" />  </td>
            <td align="center" bgcolor="#FFFFFF">
            <input name="" type="text"  value="" size="22" /> </td>
        </tr>
            
      </table>
     
   
       <table width="95%" border="0" align="center" cellpadding="2" cellspacing="0" class="f12">
        <tr>      
          <td>   
         <div id="status-message">选择文件上传:</div>

      <div id="custom-queue"></div>
     <input id="custom_file_upload" type="hidden"/>
          </td>
         
        </tr>
     
      </table> 
      <table width="90%" border="0" align="center" cellpadding="0" cellspacing="0" class="f12">
        <tr>
          <td height="40" align="right" valign="middle">
                <img src="bayonet_images/right_34.gif" width="70" onclick="javascript:jQuery('#custom_file_upload').uploadifyUpload()"  height="22" border="0" />   
               <img src="bayonet_images/right_15.gif" width="70" onclick="close_plateinfo()" height="22" border="0" /> 
                </td>
        </tr>
      </table>
      </td>
  </tr>
</table>
</form>
</body>

</html>
 所 调用servlet :

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  out
    .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
  out.println("<HTML>");
  out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
  out.println("  <BODY>");
  out.print("    This is ");
  out.print(this.getClass());
  out.println(", using the POST method");
  out.println("  </BODY>");
  out.println("</HTML>");
  out.flush();
  out.close();
 }
 public void service (HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException{
  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html");
  DiskFileItemFactory fac = new DiskFileItemFactory();
  PrintWriter out = response.getWriter();
 
  ServletFileUpload upload = new ServletFileUpload(fac);
  
  upload.setHeaderEncoding("utf-8");
  
  IPlateColorService Service = (IPlateColorService)SpringContext.getBean(IPlateColorService.class);

  List fileList = null;//Spring 中使用注解后实例化service接口
  try {
      fileList = upload.parseRequest(request); //获取 附件数据
  } catch (FileUploadException ex) {
      return;
  }
  Iterator<FileItem> it = fileList.iterator();
  String uploadPath = null;
  String filename = "";  //id
  ServletContext sc= this.getServletContext();
  uploadPath =  sc.getRealPath("/");
  uploadPath += "bayonet_file\\excel\\";
  //System.out.println(uploadPath);
  
  while (it.hasNext()) {
      FileItem item = it.next();
     
      if (!item.isFormField()) {       
              File file=new File(uploadPath);
             filename = item.getName();
              if(!file.exists()){
               file.mkdir();
              }
              try {
      item.write(new File(uploadPath+filename));
     } catch (Exception e) {
      e.printStackTrace();
     }
            }
      out.print(true);
  }
  String filePath = uploadPath+filename;
  //System.out.println("==="+filePath);
  try {
   Service.addExcel(filePath);//调用service方法。
  } catch (Exception e) {
   e.printStackTrace();
  } 

 

所调用的service方法:

public void addExcel(String filepath){
  JxlRead jr= new JxlRead();
  try{
   jr.readExcel(filepath);
      }catch(Exception e){
       e.printStackTrace();
      }
  
  
 }

 

读取Excel 类并且调用方法写入:


public class JxlRead {
 
 public void readExcel(String filePath) throws Exception { 
        InputStream is = null; 
        Workbook workbook = null;
       try { 
            is = new FileInputStream(filePath); 
            workbook = Workbook.getWorkbook(is); 
            // sheet row column 下标都是从0开始的 
            Sheet sheet = workbook.getSheet(0); 
           
            int column = sheet.getColumns(); 
            int row = sheet.getRows(); 
            System.out.println("共有" + row + "行," + column + "列数据"); 
            plateType pt= new plateType();
            IPlateTypeService pts = (IPlateTypeService)SpringContext.getBean(IPlateTypeService.class);
           
            for(int i=1;i<row;i++){
             for(int j=0;j<column;j++){
              if(j==0){
               Cell cellA1 = sheet.getCell(0, i);
                  pt.setTbpt_id(cellA1.getContents());    
              }
              if(j==0){
               Cell cellA1 = sheet.getCell(1, i);
                  pt.setTbpt_name(cellA1.getContents());    
              }
              if(j==0){
               Cell cellA1 = sheet.getCell(2, i);
                  pt.setTbpt_memo(cellA1.getContents());    
              }
              
             }
             pts.addEntity(pt);
            }
            // A1是字符 
            //Cell cellA1 = sheet.getCell(0, 0); 
           // System.out.println("A1 type:" + cellA1.getType()); 
          //  if (cellA1.getType().equals(CellType.LABEL)) { 
           //     System.out.println("A1 content:" + cellA1.getContents()); 
          //  } 
 
            // 操作完成时,关闭对象,释放占用的内存空间 
            workbook.close(); 
            is.close(); 
        } catch (Exception e) { 
            e.printStackTrace(System.out); 
        } finally { 
            if (is != null) { 
                is.close(); 
            } 
        } 
    } 
 
    /**
     * @param args
     * @throws Exception
     */ 
  //  public static void main(String[] args) throws Exception { 
  //      String filePath = "D:\\test\\testjxlread.xls"; 
   //     JxlRead jxlRead = new JxlRead(); 
   //     jxlRead.readExcel(filePath); 
  //  } 
 }

  • jxl.jar (708.7 KB)
  • 下载次数: 82
分享到:
评论

相关推荐

    用JAVA将数据库导入csv程序

    本项目关注的是如何使用Java编程语言将数据库中的记录导出为CSV(Comma Separated Values)格式的文件。CSV因其通用性和易于处理的特性,被广泛应用于数据交换。 首先,让我们深入了解CSV文件格式。CSV是一种简单的...

    读取Excel格式CSV格式文件

    本文将深入探讨如何在Java环境中读取Excel格式(.xls或.xlsx)以及CSV(逗号分隔值)格式的文件,同时也会提及所给的压缩包文件中的相关资源。 首先,Excel文件是一种由Microsoft Office提供的电子表格格式,用于...

    java读取cvs文件并导入数据库

    Java读取CSV文件并导入数据库是很常见的一种数据导入方式,今天我们就来详细介绍这个过程。 为什么需要读取CSV文件并导入数据库? 在实际应用中,我们经常会遇到需要将数据从CSV文件中导入到数据库中的情况,例如...

    java导入csv到sqlserver数据库的简单实现

    本文将详细讲解如何使用Java来实现从CSV文件到SQL Server数据库的数据导入。 首先,我们需要理解CSV(Comma Separated Values)文件格式。它是一种通用的、轻量级的数据交换格式,以纯文本形式存储表格数据,每一行...

    将Excel数据导入mysql数据库的几种方案.pdf

    首先,我们需要将 Excel 文件另存为 CSV 文件,然后使用 phpMyAdmin 的导入功能将数据导入到数据库中。 优点:简单、快速,易于实现。 缺点:需要将 Excel 文件另存为 CSV 文件,并且 phpMyAdmin 的导入功能有一定...

    数据导入到excel和读取excel数据到数据库

    本文将详细讲解如何将数据导入到Excel以及如何从Excel读取数据并导入到数据库,以实现高效的数据操作。 一、数据导入到Excel 1. 手动导入:最简单的方式是直接复制其他源(如文本文件、数据库表)中的数据,然后在...

    将CSV、EXCEL、TXT等文件的数据导入到oracle中

    本文将详细探讨如何将CSV、Excel和TXT等格式的文件数据导入到Oracle数据库中,以便进行高效的数据处理和分析。 一、CSV文件导入 CSV(Comma Separated Values)是一种通用的文本文件格式,用于存储表格数据。Oracle...

    Excel导入数据库常用工具

    6. CSV格式:如果数据库支持,可以先将Excel数据保存为CSV(逗号分隔值)文件,因为CSV是一种通用的文本格式,大多数数据库都支持直接导入。 7. 数据库设计:在导入前,需要考虑数据库的表结构设计,确保Excel数据...

    EasyExcel 并发读取文件字段并进行校验,数据写入到新文件,批量插入数据到数据库

    下面我们将详细探讨如何使用EasyExcel实现并发读取文件字段、进行数据校验、将数据写入新文件以及批量插入到数据库的操作。 1. **EasyExcel介绍** EasyExcel是一款轻量级的Java Excel处理框架,它基于NIO和内存...

    java编写的数据库导入和导出工具

    - **IO流**:用于读取和写入文件,包括数据库的备份文件和CSV或Excel格式的数据文件。 2. **数据库连接与操作**: - **JDBC(Java Database Connectivity)**:Java标准API,用于与各种类型的数据库建立连接,...

    多线程导入excel 数据

    在Java编程中,多线程导入Excel数据是一项常见的任务,特别是在大数据处理和高并发场景下。...例如,文件`BigdataTest.java`可能是实现上述功能的一个测试类,通过它我们可以模拟并测试导入Excel数据的多线程场景。

    Csv导入导出.rar

    - 编程语言导入:编程语言如Python、Java、R都有相应的库支持CSV文件的读取,例如Python的pandas库可以轻松完成CSV文件的导入并进行数据分析。 3. CSV导出: - 数据库导出:数据库系统通常支持将表格数据导出为...

    sqllite数据导入导出到Excel

    先打开Excel文件,将数据保存为CSV格式,然后在SQLite中使用`.import`命令或编程方式将CSV数据导入数据库。如果数据量较大,也可以先创建对应的表结构,然后逐行插入数据。 在实际应用中,可能还需要处理一些细节...

    java swing-会员管理系统窗体 GUI(CSV excel文件读取)

    读取CSV文件是将这些数据导入到系统中的关键步骤,可以使用Java的内置库如OpenCSV或者Apache Commons CSV来实现。 Excel文件,通常以.xlsx或.xls为扩展名,是由Microsoft Excel创建的电子表格文件,用于存储和处理...

    java实现Excel导入导出

    本项目利用了jxl库,一个广泛使用的Java库,来处理Excel文件,实现了从Excel到Vector对象的数据读取以及从Vector到Excel的数据写入功能。 1. **jxl库介绍** jxl库是Java处理Excel文件的一个开源库,支持读写...

    Excel百万级别数据的导入和导出

    例如,将大文件分割成小块,逐块导入Excel,以降低内存占用并提高处理速度。 3. **使用编程语言**:Java库如Apache POI或EasyExcel(对应压缩包中的millionsdataeasyexcel-demo)等,可以高效地处理大量数据。这些...

    java poi 实现excel的导入与导出

    根据业务需求,你可以实现多个策略,比如CSV导入策略、数据库导入策略等。在实际应用中,通过配置文件或依赖注入选择合适的策略。 ```java public interface ImportStrategy { List&lt;MyClass&gt; importData...

    轻松将Excel的xls格式文件导入到Oracle数据库

    本文将详细阐述如何轻松地将Excel的xls格式文件导入到Oracle数据库。 首先,理解Oracle数据库。Oracle是一种关系型数据库管理系统(RDBMS),它提供了丰富的数据存储、管理、查询和分析功能。在企业级应用中,...

    本地excel文件导入到sql中

    在IT领域,将本地Excel文件导入到SQL数据库是一项常见的任务,尤其在数据分析、报表生成以及数据迁移等场景中。Excel的灵活性和易用性使其成为数据处理的首选工具,而SQL数据库则提供了强大的数据存储和查询能力。...

    Java多线程读取大文本文件并批量插入MongoDB的实战代码

    Java多线程读取大文本文件并批量插入MongoDB的代码,文本文件,csv文件,可以结合POI改造使其支持excel。 适合做大量文本数据或日志文件入库的场景,大文本被拆分成多个线程处理,速度快。 批量插入MongoDB,存在则...

Global site tag (gtag.js) - Google Analytics