`

将xls中的数据写入数据库

阅读更多
 <script>

    function callUpload() {
     var fileValue = document.FileUpload.file1.value;
     if (fileValue == "") {
     	alert("请选择所需上传的文件!"); 
     	return false;
     }
      showLayer.style.display = "inline";  
     //count()
     FileUpload.submit(); 
    
   }
</script>
<body>
<form  name="FileUpload" method="post" action="uploads" enctype="multipart/form-data" >  
    <table border="0">
      <tr>
        <td nowrap> 
          <div align="left">导入的EXCEL文件(导入的明细会复盖原有明细数据):</div>
        </td>
      </tr>
      <tr>
        <td nowrap> 
        <input type="file" class="mybutton" name="file1" size="50" style="border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px">
        <input type="submit" class="mybutton" value="导入" name="shangchuan" onClick="return callUpload()" style="border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px" >
        </td>
      </tr> 
    </table>
    <table width="100%">
    	<tr>
      	<td>
      		<hr width="100%">
      	</td>
      </tr>
    </table>
    </form>
</body>

 

protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {  
		  final long MAX_SIZE = 3 * 1024 * 1024;// 设置上传文件最大为 3M
		  String  u_name="";
		   // 允许上传的文件格式的列表
		  final String[] allowedExt = new String[] { "xls", "jpeg", "gif", "txt",
		     "doc", "docx", "mp3", "wma" };
		  response.setContentType("text/html");
		   // 设置字符编码为UTF-8, 这样支持汉字显示
		  response.setCharacterEncoding("GBK");
		  //实例化RequestContext对象
		  RequestContext requestContext = new ServletRequestContext(request);  
		  if(FileUpload.isMultipartContent(requestContext)){} 
		  // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
		  DiskFileItemFactory dfif = new DiskFileItemFactory();  
	      //上传文件胡原始路径
	      String  realpath = this.getServletContext().getRealPath("/")+"ImagesUploadTemp" ;
	      // 设置存放临时文件的目录
		  dfif.setRepository(new File(realpath));
		  dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘 
		  // 用以上工厂实例化上传组件
		  ServletFileUpload sfu = new ServletFileUpload(dfif);
		  System.err.println(" reapath="+this.getServletContext().getRealPath("/")+"ImagesUploadTemp");
		   // 设置最大上传尺寸
		  sfu.setSizeMax(MAX_SIZE);  
		  PrintWriter out = response.getWriter();
		  // 从request得到 所有 上传域的列表
		  List fileList =  null; 
		  try {
			   fileList = sfu.parseRequest(request); 
		  } catch (FileUploadException e) {// 处理文件尺寸过大异常
			   e.printStackTrace();
			   if (e instanceof SizeLimitExceededException) {
				   out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
				   out.println("<a href=\"excelInsert.action\" target=\"_top\">返回</a>");
				   return;
			   }
			   //e.printStackTrace();
		   }
		   // 没有文件上传
		   if (fileList == null || fileList.size() == 0) {
			   out.println("文件大小不能为空,请选择上传文件<p />");
			   out.println("<a href=\"excelInsert.action\" target=\"_top\">返回</a>");
			   return;
		   }
		   // 得到所有上传的文件
		   Iterator fileItr = fileList.iterator();
		   // 循环处理所有文件
		   while (fileItr.hasNext()) {
			    FileItem fileItem = null;
			    String path = null;
			    long size = 0;
			    // 得到当前文件
			    fileItem = (FileItem) fileItr.next();
			    // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
			    if (fileItem == null || fileItem.isFormField()) {
			     continue;
			    }
			    // 得到文件的完整路径
			    path = fileItem.getName();  
			    path = new String(path.getBytes("ISO-8859-1"),"UTF-8");
			    System.out.println("完整路径="+path);
			    // 得到文件的大小
			    size = fileItem.getSize();
			    if ("".equals(path) || size == 0) {
			    	out.println("请选择上传文件<p />");
			    	out.println("<a href=\"excelInsert.action\" target=\"_top\">返回</a>");
			    	return;
			    }
	
			    // 得到去除路径的文件名
			    String t_name = path.substring(path.lastIndexOf("\\") + 1);
			    // 得到文件的扩展名(无扩展名时将得到全名)
			    String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
			    // 拒绝接受规定文件格式之外的文件类型
			    int allowFlag = 0;
			    int allowedExtCount = allowedExt.length;
			    for (; allowFlag < allowedExtCount; allowFlag++) {
			    	if (allowedExt[allowFlag].equals(t_ext))
			    		break;
			    }
			    if (allowFlag == allowedExtCount) {
			    	out.println("请上传以下类型的文件<p />");
			    	for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
			    		out.println("*." + allowedExt[allowFlag]
			    		                              + "&nbsp;&nbsp;&nbsp;");
			    		out.println("<p /><a href=\"excelInsert.action\" target=\"_top\">返回</a>");
			    		return;
			    }
	
			    long now = System.currentTimeMillis();
			    // 根据系统时间生成上传后保存的文件名
			    String prefix = String.valueOf(now);
			    // 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
			    u_name = this.getServletContext().getRealPath("/")+"ImagesUploaded"+"\\"
			      + prefix + "." + t_ext;
			    System.out.println("文件上传后的路径!u_name="+u_name);
			    try {
				     // 保存文件
				     fileItem.write(new File(u_name));
				     out.println("文件上传成功. 已保存为: " + prefix + "." + t_ext
				       + " &nbsp;&nbsp;文件大小: " + size + "字节<p />");
				     out.println("<a href=\"excelInsert.action\" target=\"_top\">继续上传</a>");
			    } catch (Exception e) {
			    	e.printStackTrace();
			    } 
		   }
		   u_name = u_name.replace("\\", "/");
		   System.out.println("u_name =="+u_name);
		   insert(u_name,request,response);
		   
		   /******************这个你把它去掉*****************/
		   //主要是为了导入成功以后,将它显示到页面上的方法
		   List list_lxmc = exam.getAllStlxMc();
		   for(int i=0;i<list_lxmc.size();i++){
//				System.out.println("类型名称"+list_lxmc.size()+";"+list_lxmc.get(i));
		   }
			
		   request.setAttribute("list_lxmc", list_lxmc);
			
			
		   List list_allSel = exam.getSelThemeTypeNamesobr_ones();
//		   System.out.println(list_allSel+"..............");
		   request.setAttribute("list_allSel", list_allSel);
		   
		   /***************************/
		   request.getRequestDispatcher("/admin/thememanage/excelInsert.jsp").forward(request, response);

	}



public void insert(String path,HttpServletRequest request,HttpServletResponse response){
		try{
		    //////////// 读取 u_name 文件 并保存///////////
		    
		    System.out.println("开始时间="+new Date());
		    
			java.io.File file = new java.io.File(path);
			java.io.InputStream inStream = new java.io.FileInputStream(file);
			HSSFWorkbook wb = new HSSFWorkbook(inStream);
			
			//int sheetNum = wb.getNumberOfSheets();  
			int sheetNum = 1; 
			ThemeBean tb = null;
			ArrayList list = new ArrayList();
			//为了获得32随机数主键
			UUIDGenerator uuid=new UUIDGenerator();
			for (int i = 0; i < sheetNum; i++){
				HSSFSheet childSheet = wb.getSheetAt(i);
				int rowNum = childSheet.getLastRowNum() + 1;
//				HSSFRow rowline = childSheet.getRow(rowNum); 
				//这里我取不到列数的,所以将它写死了
				int cellNum =6; 
//				System.out.println("列数"+rowline.getLastCellNum());
				for (int j = 2; j < rowNum; j++){	
					tb = new ThemeBean();
					HSSFRow row = childSheet.getRow(j); 
					if (row == null)
						continue;	 
					String value = "";
					for (int k = 0; k < cellNum; k++){ 
						HSSFCell cell = row.getCell((short) k);
//						System.out.println(cell.getCellType()+"===type");
						if (cell.getCellType() != HSSFCell.CELL_TYPE_STRING){
						  continue;
						}   
						//循环取到xls中的值
						value = String.valueOf(cell.getStringCellValue().trim());
						//System.out.println("value="+a);
						if (value == null)
							value = "";
						//对取到值 中有特殊符号进行处理(这个方法可选)
						value = value.replace("'", "");
						value = value.replace("‘", "");
						value = value.replace("’", ""); 
						 
						switch(k){
							case 0: tb.setSTTM(value); 
							case 1: tb.setSTKSX1(value);
							case 2: tb.setSTKSX2(value);
							case 3: tb.setSTKSX3(value); 
							case 4: tb.setSTKSX4(value); 
							case 5: tb.setRIGHTRESULT(value); 
						} 
					}
					
					tb.setSTZT("未使用"); 
					tb.setBZ("备注就省略了");
					tb.setSTXXID(uuid.getNextValue("STXXID"));
					tb.setSTBH(uuid.getNextValue("STBH"));
					//将值放到对象中在 放到list中,为了方便插入数据库
					list.add(tb); 
				}
			}
			try{
				ThemeAction action  = new ThemeAction();
				//判断这个xls有没有被从复导入
				String ret = action.upload(list); 
				if(ret!="ok"){
					request.setAttribute("excel", ret);
				}
				System.out.println("结束时间="+new Date()); 
				//我有4000多条数据大概花了1分钟左右的,读xls只花了2秒钟的,插入数据库时间要多点,可能是我的方法写的不好,还请理解,你们也可以用自己更好的方法来代替
				 
			}catch(Exception ex){
				ex.printStackTrace();
				System.out.println("有异常的");
				return;
			}
			//关闭文件流
			inStream.close(); 
			//删除临时文件
			file.delete();  
		}catch(Exception e){
			e.printStackTrace();
		}
	} 

 

1
0
分享到:
评论

相关推荐

    java中excel数据写入数据库

    在Java编程中,将Excel数据写入数据库是一项常见的任务,特别是在数据处理和导入导出场景。这个场景通常涉及使用特定库来解析Excel文件,并通过某种框架(如Struts)与数据库进行交互。以下是对这个过程的详细解释:...

    excel文件写入数据库

    下面将详细解释如何使用Java来读取Excel文件并将其数据写入数据库。 首先,我们需要一个能够读取Excel文件的Java库。Apache POI是一个广泛使用的开源库,它提供了API来操作Microsoft Office格式的文件,包括Excel...

    C++实现从TXT或Excel读取数据写入数据库小工具

    在这个项目中,我们有一个名为"C++实现从TXT或Excel读取数据写入数据库小工具"的实用程序,它利用C++编程语言来实现数据的读取和存储功能。这个工具能够帮助开发者高效地处理来自文本文件(如TXT)和电子表格文件...

    批量读取excel文件并利用dbcp连接池写入数据库

    本话题主要涉及如何批量读取Excel文件,并利用DBCP连接池将数据写入数据库。这个过程涉及到几个关键知识点,包括Excel文件操作、数据库连接池的使用以及多线程处理。 首先,Excel文件操作通常使用Java中的Apache ...

    Java 代码从Excel表写入数据库

    4. **数据写入数据库**: - 创建SQL INSERT语句模板,其中包含占位符,如`INSERT INTO table_name (column1, column2) VALUES (?, ?)`。 - 遍历Excel数据,为每个单元格创建`PreparedStatement`的参数,使用`...

    java解析Excel文件并把数据存入数据库和导出数据为excel文件SpringBoot代码示例

    1、java解析读取excel文件中的数据,并写入数据库。 2、java读取数据库数据,并导出为excel文件。 3、README.md中有详细的操作步骤示例。 使用说明: 1. 先使用postman导入:other/excel相关.postman_collection....

    java实现Excel数据导入到数据库

    3. **写入数据**:遍历查询结果,将每一行数据写入Excel的工作表中,创建对应的行和单元格对象。 4. **设置格式**:根据需要,可以对单元格进行样式设置,如字体、颜色、边框等。 5. **保存Excel文件**:最后,...

    java 将数据库中的输入写入到excel中

    接着,我们遍历结果集,为每一行创建一个`Row`对象,并为每一列创建一个`Cell`对象,将数据库中的数据写入单元格。最后,我们将工作簿写入指定的文件路径,关闭工作簿以释放资源。 为了整合这两个部分,你可以调用`...

    读取xls文件到数据库

    7. **插入数据**:构建SQL插入语句,逐行将数据写入数据库。记得对用户输入进行适当的SQL注入防护。例如: ```php $sql = "INSERT INTO your_table (column1, column2) VALUES (?, ?)"; $stmt = $pdo-&gt;prepare($...

    java POI 通过MultipartFile删除Excel文件解析写入数据库

    下面我们将深入探讨如何使用Java POI和MultipartFile来解析Excel文件,并将数据写入数据库。 首先,我们需要理解MultipartFile的工作原理。在Spring MVC中,当用户上传文件时,控制器方法的参数可以声明为...

    excel表导入数据库 数据库导出excel(idea平台)

    2. 创建Excel工作簿和工作表对象,使用Apache POI将数据写入到工作表中。 3. 设置单元格格式,如对齐方式、字体、颜色等,以提高数据的可读性。 4. 将工作簿写入到OutputStream中,这样可以通过HTTP响应发送到客户端...

    从access数据库读取数据写入xsl

    从access数据库读取写入xls表格,可以借鉴参考,对xls操作和access读写有学习借鉴的地方,写xls有几种方法,我的是一张表全部封装为一个range一次写入,速度很快,如果一个单元格一个单元格的写的话非常慢。

    excel报表功能读入写入数据库功能demo

    综上所述,"excel报表功能读入写入数据库功能demo"涵盖了从Excel文件读取数据,利用Apache POI处理数据,然后通过JDBC将数据写入数据库的基本流程。这个过程在数据分析、数据迁移、报告生成等场景中非常实用。在实际...

    poi实现读取数据库,新建xlsx,写入数据库数据,设置样式,选择路径,文件下载(原创)

    通过执行SQL查询,将数据从数据库中检索出来。 3. **新建xlsx文件**: 使用Apache POI,可以创建新的XLSX工作簿对象。这相当于Excel中的一个文件。然后,可以向工作簿添加工作表,每个工作表对应Excel的一个sheet...

    使用POI解析excel文件并写入数据库

    本篇文章将详细讲解如何使用Apache POI解析Excel文件,并将数据写入数据库。 首先,我们需要了解Apache POI的基本概念。POI提供了一个Java API,使得开发者可以在不依赖Microsoft Office的情况下,处理Excel文件。...

    从excel中导入数据到mdb数据库中指定字段

    5. **数据导入**:根据读取和清洗后的Excel数据,利用SQL插入语句将数据逐条写入数据库。易语言可以构建和执行SQL命令,批量插入数据到指定字段。 6. **事务处理**:为了保证数据的一致性,可以使用事务处理。如果...

    POI从数据库查询数据写入Excel工具类

    综上所述,"POI从数据库查询数据写入Excel工具类"是Java开发中数据处理能力的体现,结合了现代Java语言特性、Maven项目管理和POI的Excel操作,以及数据库连接技术,为企业级数据导出提供了一种高效的解决方案。

    vb导出ACCESS数据库中一个表的内容到EXCEL MDB2XLS

    标题中的“vb导出ACCESS数据库中一个表的内容到EXCEL MDB2XLS”是指使用Visual Basic(VB)编程语言将Microsoft Access(MDB)数据库中的数据导出到Excel(XLS)文件的过程。这个过程通常涉及数据库操作、文件处理...

    读取excel数据到数据库

    在将数据写入数据库之前,可能需要进行一些预处理,例如数据清洗、类型转换等。例如,将某些列转换为整数或日期格式: ```python data['column_name'] = pd.to_datetime(data['column_name']) data['another_...

Global site tag (gtag.js) - Google Analytics