`
kissuyoyo
  • 浏览: 15306 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Excel导入MySql数据库

    博客分类:
  • java
 
阅读更多

1、JSP页面

	<div id="hideDiag">
		<form id="dataForm" enctype="multipart/form-data" >
			<table class="tableForm" cellspacing="8">
				<tr>
					<td class="td100" align="right">请选择excel文件:</td>
					<td class="td200">
					 <input type="file" name="excelFile" id="excelFile"/>
					</td>
				</tr>
			</table>
    	</form>
	</div>
	
	<div id="progress" style="display: none" >
		<div id="title">
			<span id="text">导入进度</span>
			<div id="close">X</div>
		</div>
			<div id="progressBar">
				<div id="uploaded"></div>
			</div>
			<div id="info"></div>
	</div>

 2、JS

function save(){
		if(!$("#dataForm").form('validate')){
			return ;
		}
		var form = $("#dataForm");
	    var options  = {    
	        url:'/mallGiftAction/save.shtml',    
	        type:'post', 
	        beforeSend: ajaxLoading, 
	        success:function(data)    
	        {    
	        	ajaxLoadEnd();
	         	if(data.success){
	         		$('#tb_mallGift').datagrid('reload');
	         		$('#tb_mallGift').datagrid('clearSelections');
	         	}else{	
	         		$.messager.info(data.msg);
	         		$("#progress").css("display", "none");
	         	}
	        }    
	    };    
	    form.ajaxSubmit(options); 
}

function ajaxLoading(){   
	$('#hideDiag').dialog('close');
	$("#progress").css("display", "block");
	var myDate = new Date();
	startTime = myDate.getTime();
	$(this).attr("disabled", true);
	window.setTimeout("getProgressBar()", 1000);
    $("<div class=\"datagrid-mask\"></div>").css({display:"block",width:"100%",height:$(window).height()}).appendTo("body");   
}   
function ajaxLoadEnd(){  
     $(".datagrid-mask").remove();   
} 

 3、Action

@RequestMapping(value = "/save")
	@ResponseBody
	public ResultVO save(String excelFilePath, MultipartFile excelFile, HttpServletRequest request, HttpServletResponse response) {

		try {
			mallGiftService.doStockin(excelFile,request);
			return success("导入成功");
		} catch (Exception e) {
			return error(e.getMessage());
		}

	}

 4、Service

public void doStockin(MultipartFile excelFile, HttpServletRequest request) throws Exception {

		// excel读取的字段
		Map<String, String> beanNameMap = new HashMap<String, String>();
		beanNameMap.put("卡号", "cardNo");
		beanNameMap.put("密码", "verifyCode");

		// 读取excel数据
		List<Map<String, Object>> list = ExcelUtil.parseExcel(excelFile, beanNameMap);
		List<MallGift> mallGiftList = ExcelUtil.toObjectList(list, MallGift.class);

		int totalCount = mallGiftList.size();
		int count = 1;
		// excel数据入库
		for (MallGift mallGift : mallGiftList) {
			mallGift.setStatus(MallGift.STATUS_NEW);
			// 加载监听器
			ProgressModel status = new ProgressModel();
			status.setTotalCount(totalCount);
			status.setOverCount(count++);
			request.getSession().setAttribute("status", status);
			mallGiftDao.buffSave(mallGift);
		}
	}

 5、ExcelUtil

public static List<Map<String, Object>> parseExcel(MultipartFile excelFile, Map<String, String> beanNameMap) throws IOException {

		List<Map<String, Object>> result = new LinkedList<Map<String, Object>>();
		InputStream is = excelFile.getInputStream();
		XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
		XSSFRow beanNameRow = xssfWorkbook.getSheetAt(0).getRow(0);
		int excleRowLength = xssfWorkbook.getSheetAt(0).getRow(0).getPhysicalNumberOfCells();
		String[] columnName = new String[excleRowLength];
		for (int i = 0; i < columnName.length; i++) {
			XSSFCell name = beanNameRow.getCell(i);
			Iterator<String> it = beanNameMap.keySet().iterator();
			while (it.hasNext()) {
				String key = (String) it.next();
				String value = beanNameMap.get(key);
				if (key.trim().equals(name.getStringCellValue())) {
					columnName[i] = value;
				}
			}

		}

		for (int sheetIndex = 0; sheetIndex < xssfWorkbook.getNumberOfSheets(); sheetIndex++) {
			XSSFSheet sheet = (XSSFSheet) xssfWorkbook.getSheetAt(sheetIndex);
			for (int rowIndex = 1; rowIndex < sheet.getPhysicalNumberOfRows(); rowIndex++) {
				XSSFRow row = sheet.getRow(rowIndex);
				Map<String, Object> map = new HashMap<String, Object>();
				for (int cellIndex = 0; cellIndex < xssfWorkbook.getSheetAt(0).getRow(0).getPhysicalNumberOfCells(); cellIndex++) {
					XSSFCell cell = row.getCell(cellIndex);
					String value = getCellValue(cell);
					if (StringUtils.isEmpty(value)) {
						throw new BaseException("Excel表格中的第:" + (rowIndex + 1) + "行第" + (cellIndex + 1) + "列为空.");
					}
					if (columnName[cellIndex] != null && columnName[cellIndex].trim().length() > 0) {
						map.put(columnName[cellIndex].trim(), getCellValue(cell));
					}
				}
				result.add(map);
			}
		}
		return result;
	}

	/**
	 * 利用反射将 List<Map<String,Object>>数据 生成相应的List<T>数据
	 * 
	 */
	public static <T> List<T> toObjectList(List<Map<String, Object>> list, Class<T> clazz) throws Exception {

		List<T> returnList = new LinkedList<T>();
		for (int i = 0; i < list.size(); i++) {
			Set<Map.Entry<String, Object>> set = list.get(i).entrySet();
			Iterator<Entry<String, Object>> it = set.iterator();
			T obj = clazz.newInstance();
			Method[] methods = clazz.getDeclaredMethods();
			while (it.hasNext()) {
				Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it.next();
				for (Method m : methods) {
					if (m.getName().startsWith("set")) {
						String methodName = entry.getKey().toString();
						StringBuffer sb = new StringBuffer(methodName);
						sb.replace(0, 1, (methodName.charAt(0) + "").toUpperCase());
						methodName = "set" + sb.toString();
						if (methodName.equals(m.getName())) {
							m.invoke(obj, entry.getValue());
							break;
						}
					}
				}
			}
			returnList.add(obj);
		}
		return returnList;
	}

	/**
	 * 获取当前单元格内容
	 */
	private static String getCellValue(Cell cell) {

		String value = "";
		if (cell != null) {
			switch (cell.getCellType()) {
			case Cell.CELL_TYPE_NUMERIC:
				if (HSSFDateUtil.isCellDateFormatted(cell)) {
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
					Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
					value = sdf.format(date);
				} else {
					DecimalFormat format = new DecimalFormat("###################.###########");
					value = format.format(cell.getNumericCellValue());
				}
				break;
			case Cell.CELL_TYPE_STRING:
				value = cell.getStringCellValue();
				break;
			case Cell.CELL_TYPE_BOOLEAN:
				Boolean data = cell.getBooleanCellValue();
				value = data.toString();
				break;
			case Cell.CELL_TYPE_ERROR:
				System.out.println("单元格内容出现错误");
				break;
			case Cell.CELL_TYPE_FORMULA:
				DecimalFormat format = new DecimalFormat("###################.###########");
				value = format.format(cell.getNumericCellValue());
				if (value.equals("NaN")) {
					value = cell.getStringCellValue().toString();
				}
				break;
			case Cell.CELL_TYPE_BLANK:
				System.out.println("单元格内容 为空值 ");
				break;
			default:
				value = cell.getStringCellValue().toString();
				break;
			}
		}
		return value;
	}

	public static void createExcel(List<Map<String, Object>> list, LinkedHashMap<String, String> headMap, String fileName) {

		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet sheet = workbook.createSheet();
		sheet.setDefaultRowHeightInPoints(10);
		sheet.setDefaultColumnWidth(10);
		int rowNum = 0;

		// 设置标题行
		HSSFCellStyle titleStyle = workbook.createCellStyle();
		titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直
		titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平
		HSSFFont font = workbook.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
		titleStyle.setFont(font);
		HSSFRow titleRow = sheet.createRow((short) 0);
		int m = 0;
		for (String title : headMap.values()) {
			HSSFCell cell = titleRow.createCell(m);
			cell.setCellValue(title);
			cell.setCellStyle(titleStyle);
			m++;
		}
		rowNum++;

		HSSFCellStyle style = workbook.createCellStyle();
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平

		// 设置内容行
		for (Map<String, Object> map : list) {
			HSSFRow row = sheet.createRow((short) rowNum);
			int i = 0;
			for (String value : headMap.keySet()) {
				HSSFCell cell = row.createCell(i);
				cell.setCellValue(String.valueOf(map.get(value)));
				cell.setCellStyle(style);
				i++;
			}
			rowNum++;
		}
		OutputStream out = null;

		try {
			out = new FileOutputStream(fileName);
			workbook.write(out);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

 6、ProgressModel

private long pBytesRead = 0L;

	private long pContentLength = 0L;

	private int totalCount;

	private int overCount;

	public ProgressModel() {
		pBytesRead = 0L;
		pContentLength = 0L;
	}

	public long getPBytesRead() {

		return pBytesRead;
	}

	public void setPBytesRead(long bytesRead) {

		pBytesRead = bytesRead;
	}

	public long getPContentLength() {

		return pContentLength;
	}

	public void setPContentLength(long contentLength) {

		pContentLength = contentLength;
	}

	public int getTotalCount() {

		return totalCount;
	}

	public void setTotalCount(int totalCount) {

		this.totalCount = totalCount;
	}

	public int getOverCount() {

		return overCount;
	}

	public void setOverCount(int overCount) {

		this.overCount = overCount;
	}

 7、MallGiftDao

public void buffSave(MallGift mallGift) {

		try {
			super.buffSave(mallGift);//存入数据库方法
		} catch (RuntimeException e) {
			Throwable cause = e.getCause();
			if (cause instanceof MySQLIntegrityConstraintViolationException) {
				throw new RuntimeException("卡号:" + mallGift.getCardNo() + "在数据库已经存在,不能重复导入");
			}
		}
		//myCache.set(mallGift);
		//if (StringUtils.isNotEmpty(mallGift.getCardNo()))
		//	myCache.hSet(mallGift, "cardNo", mallGift.getCardNo());

	}

 

 

分享到:
评论

相关推荐

    C# 写的Excel导入mysql数据库

    综上所述,C#实现Excel数据导入MySQL涉及到的主要技术点包括C#编程、Excel文件读取、数据库连接与操作、数据流处理以及性能优化。在实际操作中,需要根据具体需求和环境调整策略,确保程序的稳定性和效率。

    excel导入mysql数据库实例

    以下是一个关于“Excel导入MySQL数据库实例”的详细知识讲解。 首先,了解基本概念: 1. Excel:Microsoft Excel是一款电子表格程序,允许用户创建、编辑和共享包含数字、文本和公式的数据。 2. MySQL:MySQL是一种...

    C#通过NPOI库操作Excel,并将Excel数据导入Mysql数据库(自动建表)

    内容概要:本资源介绍了如何从利用Npoi库操作Excel,如相关读取单元格、行,介绍了如何对单元格数据格式进行操作,并分享了如何将Datatable数据导入Mysql数据库,方便项目管理。 阅读建议:此资源以如何读取Excel...

    完整的上传,excel 导入mysql 数据库

    本教程将聚焦于“完整的上传,excel导入mysql数据库”这一主题,针对公司CRM后台系统的渠道数据导入工具进行深入探讨。这个过程涉及到的技术栈主要包括海量数据处理、SpringMVC框架的应用以及POI库对Excel文件的操作...

    Java解析excel导入MySQL数据库

    在IT行业中,将Excel文件的数据解析并导入到MySQL...以上就是“Java解析excel导入MySQL数据库”这一主题的主要技术细节。通过理解这些知识点,你可以根据自身需求定制和扩展这个功能,使其更加适应实际的工作场景。

    springboot上传excel导入到数据库完整demo(后端代码)

    可以使用SpringBoot的`@SpringBootTest`注解和JUnit进行单元测试,模拟HTTP请求,验证Excel导入功能是否按预期工作。 6. **项目结构**: - 一个标准的SpringBoot项目通常包括`src/main/java`下的`main`和`test`...

    h2数据导入mysql数据库(看评论酌情下载)

    最后,需要将 Excel 文件中的数据导入到 MySQL 数据库中。这里可以右键点击 test 数据库下的某一张表,选择 "导入"-"MC Excel 文件",然后选择刚刚创建的 Excel 文件。这样,h2 数据库中的数据将被成功导入到 MySQL ...

    Python-Excel一键导入MySQL数据库MySQL数据库一键读取到Excel表格

    本主题将深入探讨如何利用Python实现Excel数据一键导入MySQL数据库,以及如何从MySQL数据库中一键读取数据到Excel表格。 首先,我们需要了解Python中的两个关键库:`pandas`和`mysql-connector-python`。`pandas`是...

    excel批量导入数据库

    然而,当需要将大量数据从Excel导入到数据库时,手动操作不仅耗时,还容易出错。本篇文章将详细讲解如何实现“Excel批量导入数据库”,以及利用小工具提高效率。 一、Excel与数据库的交互原理 Excel数据批量导入...

    将excel数据导入mysql数据库--Excel2Mysql工具

    标题中的“将excel数据导入mysql数据库--Excel2Mysql工具”揭示了本次讨论的主要内容,即如何使用特定的工具——Excel2Mysql,将Excel表格中的数据高效地导入到MySQL数据库中。这是一个常见的数据迁移需求,特别是在...

    利用java 导入Excel表格数据到mysql数据库里,源码,直接导入eclipse就可以运行

    在Java开发中,将Excel表格数据导入MySQL数据库是一项常见的任务,尤其在数据处理、数据分析以及系统集成等场景中。这个项目提供了一套完整的源码,可以直接在Eclipse环境中运行,帮助开发者快速实现这一功能。下面...

    全网首发!CSV文件导入MySQL数据库工具软件 CSVtoDB v1.0.zip

    CSV文件导入MySQL数据库工具软件 CSVtoDB v1.0.zip 因手头项目需要向MYSQL数据库导入大量的EXCEL数据。网上搜索了相关博客,受限于功能或者本人有一点点的小强迫,业余时间开发了本工具。 EXCEL导入到MYSQL有多种...

    java实现Excel数据导入到mysql数据库.zip

    本项目"java实现Excel数据导入到mysql数据库"旨在利用Java技术将Excel表格中的数据高效地导入到MySQL数据库,并且在数据库中存在相同数据时进行更新,同时也支持将数据库中的数据导出到Excel表中。这个过程涉及到多...

    基于python实现的Excel一键导入MySQL数据库,MySQL数据库一键读取到Excel表格+源码+使用教程+案例展示

    基于python实现的Excel一键导入MySQL数据库,MySQL数据库一键读取到Excel表格+源码+使用教程+案例展示,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介:...

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

    Excel 数据导入 MySQL 数据库的几种方案 在数据分析和处理中,经常需要将 Excel 表格中的数据导入到 MySQL 数据库中,以便进行进一步的数据分析和处理。今天,我们将讨论如何将 Excel 数据导入 MySQL 数据库的几种...

    excel文件导入mysql数据库

    总之,将Excel文件导入MySQL数据库是一个常见的数据操作任务,通过合理利用各种工具和方法,可以高效、准确地完成数据迁移。在实际工作中,根据具体需求和环境选择合适的方法,同时确保数据安全和完整性。

    使用phpexcel类实现excel导入mysql数据库功能(实例代码)

    以下是对`PHPExcel`类实现Excel导入MySQL数据库功能的详细说明。 1. **安装和下载**: 首先,你需要从`phpexcel.codeplex.com`下载`PHPExcel`库。这个库包含了处理Excel文件所需的所有类。下载后,将其解压缩并引入...

    Excel导入到Mysql数据库源代码

    本知识点主要围绕如何将Excel中的数据高效地导入到MySQL数据库进行讨论。 首先,我们需要理解Excel数据的格式。Excel表格通常包含多行多列的数据,每一行代表一个记录,每一列代表一种属性。这些数据可以通过VBA...

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

    本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java Database Connectivity)用于与MySQL数据库进行交互。 首先,我们需要了解Apache POI库。这是一个...

Global site tag (gtag.js) - Google Analytics