Java高效实现批处理Excel数据导入数据库代码

合集下载

利用Java进行Excel的数据导入导出 ppt课件

利用Java进行Excel的数据导入导出 ppt课件

Workbook.getWorkbook(is); } catch (Exception e) {e.printStackTrace(
);} 一旦创建了 Workbook,我们就可以通过它来访问Excel Sheet(术语: 工作表)。代码如 下:
//获取第一张She
et 表
Sheet rs=rwb.getSheet(0); 我们既可能通过Sheet 的名称来访问它,也可以通过下标 来访问它。如果通过
me()); sheet.setColumnView(2, 10); sheet.addCell(label); //添加作业标题
label=new Label(3,row,item.getTaskTitle()); sheet.setColumnView(3, 30
); sheet.addCell(label); // 添加完成时间 SimpleDateFormat sdf=new SimpleD
leFont(WritableFont.TIMES,18, WritableFont.BOLD, true); jxl.write.Wr
itableCellFormat wcfF=new jxl.write.WritableCellFormat(wf); jxl.write
.Label labelCF=new bel(1, 0, "This is a Label Cell", wcfF)
heet.setColumnView(0, 20); sheet.addCell(label); //添加班级 label=new L
abel(1, row, item.getClassGroupName()); sheet.setColumnView(1, 50);

如何用Java实现把excel表中的数据导入到mysql数据库已有的表中

如何用Java实现把excel表中的数据导入到mysql数据库已有的表中

如何用Java实现把excel表中的数据导入到mysql数据库已有的表中?悬赏分:15 |解决时间:2010-12-23 13:53 |提问者:quce227如何用Java实现把excel表中的数据导入到mysql数据库已有的表中?数据库中表的字段已定好~~问题补充:主要是excel中的字段和数据库表中的字段匹配然后批量导入(插入),能否给一个实例最佳答案java 读excel 还是比较方便简单的,原理就是,先用java 读取excel,然后,一行行的写入数据库,字段的话,你自己程序里面写就行了,给你个例子:从Excel读取数据,生成新的Excel,以及修改Excelpackage common.util;import jxl.*;import jxl.format.UnderlineStyle;import jxl.write.*;import jxl.write.Number;import jxl.write.Boolean;import java.io.*;/*** Created by IntelliJ IDEA.* User: xl* Date: 2005-7-17* Time: 9:33:22* To change this template use File | Settings | File Templates.*/public class ExcelHandle{public ExcelHandle(){}/*** 读取Excel** @param filePath*/public static void readExcel(String filePath){try{InputStream is = new FileInputStream(filePath);Workbook rwb = Workbook.getWorkbook(is);//Sheet st = rwb.getSheet("0")这里有两种方法获取sheet表,1为名字,而为下标,从0开始Sheet st = rwb.getSheet("original");Cell c00 = st.getCell(0,0);//通用的获取cell值的方式,返回字符串String strc00 = c00.getContents();//获得cell具体类型值的方式if(c00.getType() == BEL){LabelCell labelc00 = (LabelCell)c00;strc00 = labelc00.getString();}//输出System.out.println(strc00);//关闭rwb.close();}catch(Exception e){e.printStackTrace();}}/*** 输出Excel** @param os*/public static void writeExcel(OutputStream os){try{/*** 只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,* 因为类WritableWorkbook的构造函数为protected类型* method(1)直接从目标文件中读取WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));* method(2)如下实例所示将WritableWorkbook直接写入到输出流*/WritableWorkbook wwb = Workbook.createWorkbook(os);//创建Excel工作表指定名称和位置WritableSheet ws = wwb.createSheet("Test Sheet 1",0);//**************往工作表中添加数据*****************//1.添加Label对象Label label = new Label(0,0,"this is a label test");ws.addCell(label);//添加带有字型Formatting对象WritableFont wf = newWritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);WritableCellFormat wcf = new WritableCellFormat(wf);Label labelcf = new Label(1,0,"this is a label test",wcf);ws.addCell(labelcf);//添加带有字体颜色的Formatting对象WritableFont wfc = newWritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);WritableCellFormat wcfFC = new WritableCellFormat(wfc);Label labelCF = new Label(1,0,"This is a Label Cell",wcfFC);ws.addCell(labelCF);//2.添加Number对象Number labelN = new Number(0,1,3.1415926);ws.addCell(labelN);//添加带有formatting的Number对象NumberFormat nf = new NumberFormat("#.##");WritableCellFormat wcfN = new WritableCellFormat(nf);Number labelNF = new jxl.write.Number(1,1,3.1415926,wcfN);ws.addCell(labelNF);//3.添加Boolean对象Boolean labelB = new jxl.write.Boolean(0,2,false);ws.addCell(labelB);//4.添加DateTime对象jxl.write.DateTime labelDT = new jxl.write.DateTime(0,3,new java.util.Date());ws.addCell(labelDT);//添加带有formatting的DateFormat对象DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");WritableCellFormat wcfDF = new WritableCellFormat(df);DateTime labelDTF = new DateTime(1,3,newjava.util.Date(),wcfDF);ws.addCell(labelDTF);//添加图片对象,jxl只支持png格式图片File image = new File("f:\\2.png");WritableImage wimage = new WritableImage(0,1,2,2,image);ws.addImage(wimage);//写入工作表wwb.write();wwb.close();}catch(Exception e){e.printStackTrace();}}/*** 拷贝后,进行修改,其中file1为被copy对象,file2为修改后创建的对象* 尽单元格原有的格式化修饰是不能去掉的,我们还是可以将新的单元格修饰加上去,* 以使单元格的内容以不同的形式表现* @param file1* @param file2*/public static void modifyExcel(File file1,File file2){try{Workbook rwb = Workbook.getWorkbook(file1);WritableWorkbook wwb =Workbook.createWorkbook(file2,rwb);//copyWritableSheet ws = wwb.getSheet(0);WritableCell wc = ws.getWritableCell(0,0);//判断单元格的类型,做出相应的转换if(wc.getType == BEL){Label label = (Label)wc;label.setString("The value has been modified");}wwb.write();wwb.close();rwb.close();}catch(Exception e){e.printStackTrace();}}//测试public static void main(String[] args){try{//读ExcelExcelHandle.readExcel("f:/testRead.xls");//输出ExcelFile fileWrite = new File("f:/testWrite.xls");fileWrite.createNewFile();OutputStream os = new FileOutputStream(fileWrite);ExcelHandle.writeExcel(os);//修改ExcelExcelHandle.modifyExcel(new file(""),new File(""));}catch(Exception e){e.printStackTrace();}}}2.在jsp中做相关测试,创建一个writeExcel.jsp<%response.reset();//清除Bufferresponse.setContentType("application/vnd.ms-excel");File fileWrite = new File("f:/testWrite.xls");fileWrite.createNewFile();new FileOutputStream(fileWrite);ExcelHandle.writeExcel(new FileOutputStream(fileWrite));%>在IE中浏览writeExcel.jsp就可以动态生成Excel文档了,其中response.setContentType("application/vnd.ms- excel");语句必须要,才能确保不乱码,在jsp中输入<%@page contentType="application/vnd.ms-excel;charset=GBK"%>不行。

基于Java Excel API的数据库数据导入导出方法研究与实现

基于Java Excel API的数据库数据导入导出方法研究与实现

基于Java Excel API的数据库数据导入导出方法研究与实现作者:张明辉王清心王正玉来源:《现代电子技术》2012年第04期摘要:在Web应用系统中,用户们经常要求将数据库数据进行导入导出处理。

Microsoft Excel是用户非常熟悉的办公软件,因此,Excel作为数据库数据导入导出的中间介质成为最佳选择。

为了达到此目的,采用Java Excel API操作Excel文件的方法,实现了仅通过在客户端的操作,将数据库中的数据导出到Excel表格中,并将Excel表格中的数据导入数据库的功能。

满足了用户进行数据库数据导入导出的要求。

关键词:Java Excel API;数据库;数据导入;数据导出中图分类号:文献标识码:A文章编号:Implementation of data import and export from database based on Java Excel API(College of Information Engineering and Automation, Kunming University of Technology, Kunming 650051, China)Abstract: In Web application system, clients always call for the data import and export from a database. Microsoft Excel is an office software which is very familiar to many clients, so Excel as a intermedia becomes the first option for data import and export from database. In order to achieve the goal, this method is adopted to operate Excel by Java Excel API. Only through the process on the client side, can the data be exported from database into Excel and data be imported from Excel into database. It meet the requirements of clients for data import and export.Keywords: Java Excel API; database; data import; data export收稿日期:引言Microsoft Excel是Microsoft Office系列办公软件重要成员之一,Excel可以用来存储,管理,计算,分析各种数据文件,拥有着极大的用户群体。

Java实现大批量数据导入导出(100W以上) -(二)导出

Java实现大批量数据导入导出(100W以上) -(二)导出

Java实现⼤批量数据导⼊导出(100W以上) -(⼆)导出使⽤POI或JXLS导出⼤数据量(百万级)Excel报表常常⾯临两个问题:1. 服务器内存溢出;2. ⼀次从数据库查询出这么⼤数据,查询缓慢。

当然也可以分页查询出数据,分别⽣成多个Excel打包下载,但这种⽣成还是很缓慢。

⼤数据量导⼊请参考:那么如何解决呢?我们可以借助XML格式利⽤模板替换,分页查询出数据从磁盘写⼊XML,最终会以Excel多sheet形式⽣成。

亲测2400万⾏数据,⽣成Excel⽂件4.5G,总耗时1.5分钟。

我利⽤StringTemplate模板解析技术对XML模板进⾏填充。

当然也可以使⽤FreeMarker, Velocity等Java模板技术实现。

⾸先引⼊StringTemplate所需Jar包:使⽤技术为 stringTemplatepom.xml:1 <dependency>2<groupId>antlr</groupId>3<artifactId>antlr</artifactId>4<version>2.7.7</version>5</dependency>67<dependency>8<groupId>org.antlr</groupId>9<artifactId>stringtemplate</artifactId>10<version>3.2.1</version>11</dependency>⾸先准备导出Excel模板,然后打开-》另存为-》选择格式为XML,然后⽤⽂本打开XML,提取XML头模板(head.st可通⽤),数据体模板(boday.st):head.st可通⽤:1<?xml version="1.0"?>2<?mso-application progid="Excel.Sheet"?>3<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"4 xmlns:o="urn:schemas-microsoft-com:office:office"5 xmlns:x="urn:schemas-microsoft-com:office:excel"6 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"7 xmlns:html="/TR/REC-html40">8<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">9<Created>1996-12-17T01:32:42Z</Created>10<LastSaved>2013-08-02T09:21:24Z</LastSaved>11<Version>11.9999</Version>12</DocumentProperties>13<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">14<RemovePersonalInformation/>15</OfficeDocumentSettings>16<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">17<WindowHeight>4530</WindowHeight>18<WindowWidth>8505</WindowWidth>19<WindowTopX>480</WindowTopX>20<WindowTopY>120</WindowTopY>21<AcceptLabelsInFormulas/>22<ProtectStructure>False</ProtectStructure>23<ProtectWindows>False</ProtectWindows>24</ExcelWorkbook>25<Styles>26<Style ss:ID="Default" ss:Name="Normal">27<Alignment ss:Vertical="Bottom"/>28<Borders/>29<Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>30<Interior/>31<NumberFormat/>32<Protection/>33</Style>34</Styles>boday.st:1 $worksheet:{2<Worksheet ss:Name="$it.sheet$">3<Table ss:ExpandedColumnCount="$it.columnNum$" ss:ExpandedRowCount="$it.rowNum$" x:FullColumns="1"4 x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">5 $it.rows:{6<Row>7<Cell><Data ss:Type="String">$1$</Data></Cell>8<Cell><Data ss:Type="String">$2$</Data></Cell>9<Cell><Data ss:Type="String">$3$</Data></Cell>10</Row>11 }$12</Table>13</Worksheet>14 }$⽣成⼤数据量Excel类:ExcelGenerator:1package test.exportexcel;23import org.antlr.stringtemplate.StringTemplate;4import org.antlr.stringtemplate.StringTemplateGroup;5import test.exportexcel.bean.Row;6import test.exportexcel.bean.Worksheet;78import java.io.*;9import java.util.ArrayList;10import java.util.List;11import java.util.Random;1213/**14 * 类功能描述:generator big data Excel15 *16 * @author WangXueXing create at 19-4-13 下午10:2317 * @version 1.0.018*/19public class ExcelGenerator {20public static void main(String[] args) throws FileNotFoundException{21 ExcelGenerator template = new ExcelGenerator();22 template.output2();23 }2425/**26 * ⽣成数据量⼤的时候,该⽅法会出现内存溢出27 * @throws FileNotFoundException28*/29public void output1() throws FileNotFoundException{30 StringTemplateGroup stGroup = new StringTemplateGroup("stringTemplate");31 StringTemplate st4 = stGroup.getInstanceOf("test/exportexcel/template/test");32 List<Worksheet> worksheets = new ArrayList<>();3334 File file = new File("/home/barry/data/output.xls");35 PrintWriter writer = new PrintWriter(new BufferedOutputStream(new FileOutputStream(file)));3637for(int i=0;i<30;i++){38 Worksheet worksheet = new Worksheet();39 worksheet.setSheet("第"+(i+1)+"页");40 List<Row> rows = new ArrayList<>();41for(int j=0;j<6000;j++){42 Row row = new Row();43 row.setName1("zhangzehao");44 row.setName2(""+j);45 row.setName3(i+" "+j);46 rows.add(row);47 }48 worksheet.setRows(rows);49 worksheets.add(worksheet);50 }5152 st4.setAttribute("worksheets", worksheets);53 writer.write(st4.toString());54 writer.flush();55 writer.close();56 System.out.println("⽣成excel完成");57 }5859/**60 * 该⽅法不管⽣成多⼤的数据量,都不会出现内存溢出,只是时间的长短61 * 经测试,⽣成2400万数据,2分钟内,4.5G⼤的⽂件,打开⼤⽂件就看内存是否⾜够⼤了62 * 数据量⼩的时候,推荐⽤JXLS的模板技术⽣成excel⽂件,谁⽤谁知道,⼤数据量可以结合该⽅法使⽤63 * @throws FileNotFoundException64*/65public void output2() throws FileNotFoundException{66long startTimne = System.currentTimeMillis();67 StringTemplateGroup stGroup = new StringTemplateGroup("stringTemplate");6869//写⼊excel⽂件头部信息70 StringTemplate head = stGroup.getInstanceOf("test/exportexcel/template/head");71 File file = new File("/home/barry/data/output.xls");72 PrintWriter writer = new PrintWriter(new BufferedOutputStream(new FileOutputStream(file)));73 writer.print(head.toString());74 writer.flush();7576int sheets = 400;77//excel单表最⼤⾏数是6553578int maxRowNum = 60000;7980//写⼊excel⽂件数据信息81for(int i=0;i<sheets;i++){82 StringTemplate body = stGroup.getInstanceOf("test/exportexcel/template/body");83 Worksheet worksheet = new Worksheet();84 worksheet.setSheet(" "+(i+1)+" ");85 worksheet.setColumnNum(3);86 worksheet.setRowNum(maxRowNum);87 List<Row> rows = new ArrayList<>();88for(int j=0;j<maxRowNum;j++){89 Row row = new Row();90 row.setName1(""+new Random().nextInt(100000));91 row.setName2(""+j);92 row.setName3(i+""+j);93 rows.add(row);94 }95 worksheet.setRows(rows);96 body.setAttribute("worksheet", worksheet);97 writer.print(body.toString());98 writer.flush();99 rows.clear();100 rows = null;101 worksheet = null;102 body = null;103 Runtime.getRuntime().gc();104 System.out.println("正在⽣成excel⽂件的 sheet"+(i+1));105 }106107//写⼊excel⽂件尾部108 writer.print("</Workbook>");109 writer.flush();110 writer.close();111 System.out.println("⽣成excel⽂件完成");112long endTime = System.currentTimeMillis();113 System.out.println("⽤时="+((endTime-startTimne)/1000)+"秒");114 }115 }定义JavaBean:WorkSheet.java:1package test.exportexcel.bean;23import java.util.List;45/**6 * 类功能描述:Excel sheet Bean7 *8 * @author WangXueXing create at 19-4-13 下午10:219 * @version 1.0.010*/11public class Worksheet {12private String sheet;13private int columnNum;14private int rowNum;15private List<Row> rows;1617public String getSheet() {18return sheet;19 }20public void setSheet(String sheet) {21this.sheet = sheet;22 }2324public List<Row> getRows() {25return rows;26 }27public void setRows(List<Row> rows) {28this.rows = rows;29 }3031public int getColumnNum() {32return columnNum;33 }34public void setColumnNum(int columnNum) {35this.columnNum = columnNum;36 }3738public int getRowNum() {39return rowNum;40 }41public void setRowNum(int rowNum) {42this.rowNum = rowNum;43 }44 }Row.java:1package test.exportexcel.bean;23/**4 * 类功能描述:Excel row bean5 *6 * @author WangXueXing create at 19-4-13 下午10:227 * @version 1.0.08*/9public class Row {10private String name1;11private String name2;12private String name3;1314public String getName1() {15return name1;16 }17public void setName1(String name1) {1 = name1;19 }2021public String getName2() {22return name2;23 }24public void setName2(String name2) {2 = name2;26 }2728public String getName3() {29return name3;30 }31public void setName3(String name3) {3 = name3;33 }34 }另附实现源码: 此外,⼤数据量并并且Excel列较多时,会出现内存溢出。

java 解析excel oracle创建表语句

java 解析excel oracle创建表语句

一、概述在日常的数据处理工作中,经常会遇到需要从Excel文件中将数据导入到数据库表格中的情况。

而Java作为一种强大的编程语言,提供了丰富的工具和库来解析Excel文件,并将数据存储到数据库中。

在本文中,我们将重点介绍如何使用Java来解析Excel文件,并使用Oracle数据库创建相应的表格存储数据。

二、Java解析Excel1. 选用合适的Java库要在Java中解析Excel文件,我们可以使用Apache POI或JExcel等开源库。

这些库提供了丰富的API和功能,可以帮助我们轻松地读取和操作Excel文件。

2. 创建Excel解析程序通过使用选定的Java库,我们可以创建一个Java程序来解析Excel文件。

我们需要读取Excel文件,并将数据存储在合适的数据结构中,比如数组或集合。

3. 解析Excel数据一旦数据被存储在Java程序中,我们可以对其进行解析和处理。

这包括对数据进行验证、清洗和转换,以确保数据的准确性和完整性。

三、Oracle创建表语句在将Excel数据导入到Oracle数据库之前,我们需要先设计好数据库表格的结构。

这包括确定表格的字段、数据类型、主键和外键等信息。

2. 创建表语句在确定表格结构之后,我们可以使用Oracle的DDL语句来创建相应的表格。

DDL语句包括CREATE TABLE、ALTER TABLE等,可以用来创建和修改数据库表格的结构。

3. 导入Excel数据一旦表格被成功创建,我们可以使用Java程序将解析好的Excel数据导入到Oracle数据库中。

这可以通过使用JDBC或其他ORM框架来实现。

四、总结通过本文的介绍,我们了解了如何使用Java来解析Excel文件,并使用Oracle数据库创建相应的表格。

这对于日常的数据处理和数据库操作非常有用,可以帮助我们轻松地将Excel数据导入到数据库中,并进行进一步的数据处理和分析。

希望读者通过本文的学习,能够更加熟练地运用Java和Oracle来处理数据,提高工作效率和数据准确性。

Java导入excel并保存到数据库

Java导入excel并保存到数据库

Java导⼊excel并保存到数据库⾸先建⽴好excel表格,并对应excel表格创建数据库表。

前台jsp页⾯:其中包含js<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>导⼊excel</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="导⼊excel"><script type="text/javascript" src="view/js/jquery-1.8.2.js"></script></head><script type="text/javascript">var User = function() {this.init = function() {//模拟上传excel$("#uploadEventBtn").unbind("click").bind("click", function() {$("#uploadEventFile").click();});$("#uploadEventFile").bind("change", function() {$("#uploadEventPath").attr("value", $("#uploadEventFile").val());});};//点击上传钮this.uploadBtn = function() {var uploadEventFile = $("#uploadEventFile").val();if (uploadEventFile == '') {alert("请择excel,再上传");} else if (stIndexOf(".xls") < 0) {//可判断以.xls和.xlsx结尾的excelalert("只能上传Excel⽂件");} else {var url = "excel/import.do";var formData = new FormData($('form')[0]);user.sendAjaxRequest(url, "POST", formData);}};this.sendAjaxRequest = function(url, type, data) {$.ajax({url : url,type : type,data : data,dataType : "json",success : function(result) {alert(result.message);},error : function(result) {alert(result.message);},cache : false,contentType : false,processData : false});};};var user;$(function() {user = new User();user.init();});</script><body><form enctype="multipart/form-data" id="batchUpload" action="/excel/import" method="post" class="form-horizontal"><button class="btn btn-success btn-xs" id="uploadEventBtn" style="height:26px;" type="button">择⽂件</button><input type="file" name="file" style="width:0px;height:0px;" id="uploadEventFile"><input id="uploadEventPath" disabled="disabled" type="text" placeholder="请择excel表" style="border: 1px solid #e6e6e6; height: 26px;width: 200px;"/> </form><button type="button" class="btn btn-success btn-sm" onclick="user.uploadBtn()">上传</button></body></html>后台代码:Controller1import java.util.HashMap;2import java.util.Map;5import javax.servlet.http.HttpServletResponse;67import org.springframework.beans.factory.annotation.Autowired;8import org.springframework.stereotype.Controller;9import org.springframework.web.bind.annotation.RequestMapping;10import org.springframework.web.bind.annotation.RequestMethod;11import org.springframework.web.bind.annotation.RequestParam;12import org.springframework.web.bind.annotation.ResponseBody;13import org.springframework.web.multipart.MultipartFile;1415import service.ImportService;1617 @Controller18 @RequestMapping("/excel")19public class ImportExcelController{20 @Autowired(required=true)21private ImportService importService;2223//导⼊excel24 @RequestMapping(value = "/import", method=RequestMethod.POST)25 @ResponseBody26public Map<String, Object> importExcel(@RequestParam(value="file",required = false) MultipartFile file, HttpServletRequest request,HttpServletResponse response){27 Map<String, Object> map = new HashMap<String, Object>();28 String result = importService.readExcelFile(file);29 map.put("message", result);30return map;31 }3233 }service:1import org.springframework.web.multipart.MultipartFile;23public interface ImportService {45/**6 * 读取excel中的数据,⽣成list7*/8 String readExcelFile(MultipartFile file);910 }serviceImpl:1import java.util.List;2import java.util.Map;34import org.springframework.beans.factory.annotation.Autowired;5import org.springframework.stereotype.Service;6import org.springframework.web.multipart.MultipartFile;78import service.ImportService;9import controller.ReadExcel;10import erDao;1112 @Service13public class ImportServiceImpl implements ImportService {14 @Autowired(required = true)15private UserDao userDao;16 @Override17public String readExcelFile(MultipartFile file) {18 String result = "";19//创建处理EXCEL的类20 ReadExcel readExcel = new ReadExcel();21//解析excel,获取上传的事件单22 List<Map<String, Object>> userList = readExcel.getExcelInfo(file);23//⾄此已经将excel中的数据转换到list⾥⾯了,接下来就可以操作list,可以进⾏保存到数据库,或者其他操作,24for(Map<String, Object> user:userList){25int ret = userDao.insertUser(user.get("name").toString(), user.get("sex").toString(), Integer.parseInt(user.get("age").toString()));26if(ret == 0){27 result = "插⼊数据库失败";28 }29 }30if(userList != null && !userList.isEmpty()){31 result = "上传成功";32 }else{33 result = "上传失败";34 }35return result;36 }3738 }dao:public interface UserDao {public int insertUser(String name, String sex, int age);}daoImpl:2import org.springframework.dao.DataAccessException;3import org.springframework.jdbc.core.JdbcTemplate;4import ponent;56import erDao;78 @Component9public class UserDaoImpl implements UserDao {10 @Autowired(required = true)11private JdbcTemplate jdbcTemplate;1213 @Override14public int insertUser(String name, String sex, int age) {15 String sql = "insert into user(name,sex,age) values('"+ name +"','"+ sex +"',"+age+")"; 16int ret = 0;17try {18 ret = jdbcTemplate.update(sql);19 } catch (DataAccessException e) {20 e.printStackTrace();21 }22return ret;23 }2425 }ReadExcel:1package controller;23import java.io.IOException;4import java.io.InputStream;5import java.util.ArrayList;6import java.util.HashMap;7import java.util.List;8import java.util.Map;910import ermodel.HSSFCell;11import ermodel.HSSFWorkbook;12import ermodel.Cell;13import ermodel.Row;14import ermodel.Sheet;15import ermodel.Workbook;16import ermodel.XSSFWorkbook;17import org.springframework.web.multipart.MultipartFile;1819/**20 *21 * @author hewangtong22 *23*/24public class ReadExcel {25// 总⾏数26private int totalRows = 0;27// 总条数28private int totalCells = 0;29// 错误信息接收器30private String errorMsg;3132// 构造⽅法33public ReadExcel() {34 }3536// 获取总⾏数37public int getTotalRows() {38return totalRows;39 }4041// 获取总列数42public int getTotalCells() {43return totalCells;44 }4546// 获取错误信息47public String getErrorInfo() {48return errorMsg;49 }5051/**52 * 读EXCEL⽂件,获取信息集合53 *54 * @param fielName55 * @return56*/57public List<Map<String, Object>> getExcelInfo(MultipartFile mFile) {58 String fileName = mFile.getOriginalFilename();// 获取⽂件名59// List<Map<String, Object>> userList = new LinkedList<Map<String, Object>>();60try {61if (!validateExcel(fileName)) {// 验证⽂件名是否合格62return null;63 }64boolean isExcel2003 = true;// 根据⽂件名判断⽂件是2003版本还是2007版本65if (isExcel2007(fileName)) {66 isExcel2003 = false;68return createExcel(mFile.getInputStream(), isExcel2003);69 } catch (Exception e) {70 e.printStackTrace();71 }72return null;73 }7475/**76 * 根据excel⾥⾯的内容读取客户信息77 *78 * @param is 输⼊流79 * @param isExcel2003 excel是2003还是2007版本80 * @return81 * @throws IOException82*/83public List<Map<String, Object>> createExcel(InputStream is, boolean isExcel2003) {84try {85 Workbook wb = null;86if (isExcel2003) {// 当excel是2003时,创建excel200387 wb = new HSSFWorkbook(is);88 } else {// 当excel是2007时,创建excel200789 wb = new XSSFWorkbook(is);90 }91return readExcelValue(wb);// 读取Excel⾥⾯客户的信息92 } catch (IOException e) {93 e.printStackTrace();94 }95return null;96 }9798/**99 * 读取Excel⾥⾯客户的信息100 *101 * @param wb102 * @return103*/104private List<Map<String, Object>> readExcelValue(Workbook wb) {105// 得到第⼀个shell106 Sheet sheet = wb.getSheetAt(0);107// 得到Excel的⾏数108this.totalRows = sheet.getPhysicalNumberOfRows();109// 得到Excel的列数(前提是有⾏数)110if (totalRows > 1 && sheet.getRow(0) != null) {111this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();112 }113 List<Map<String, Object>> userList = new ArrayList<Map<String, Object>>();114// 循环Excel⾏数115for (int r = 1; r < totalRows; r++) {116 Row row = sheet.getRow(r);117if (row == null) {118continue;119 }120// 循环Excel的列121 Map<String, Object> map = new HashMap<String, Object>();122for (int c = 0; c < this.totalCells; c++) {123 Cell cell = row.getCell(c);124if (null != cell) {125if (c == 0) {126// 如果是纯数字,⽐如你写的是25,cell.getNumericCellValue()获得是25.0,通过截取字符串去掉.0获得25 127if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {128 String name = String.valueOf(cell.getNumericCellValue());129 map.put("name", name.substring(0, name.length() - 2 > 0 ? name.length() - 2 : 1));// 名称130 } else {131 map.put("name", cell.getStringCellValue());// 名称132 }133 } else if (c == 1) {134if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {135 String sex = String.valueOf(cell.getNumericCellValue());136 map.put("sex",sex.substring(0, sex.length() - 2 > 0 ? sex.length() - 2 : 1));// 性别137 } else {138 map.put("sex",cell.getStringCellValue());// 性别139 }140 } else if (c == 2) {141if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {142 String age = String.valueOf(cell.getNumericCellValue());143 map.put("age", age.substring(0, age.length() - 2 > 0 ? age.length() - 2 : 1));// 年龄144 } else {145 map.put("age", cell.getStringCellValue());// 年龄146 }147 }148 }149 }150// 添加到list151 userList.add(map);152 }153return userList;154 }155156/**157 * 验证EXCEL⽂件158 *159 * @param filePath160 * @return162public boolean validateExcel(String filePath) {163if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) { 164 errorMsg = "⽂件名不是excel格式";165return false;166 }167return true;168 }169170// @描述:是否是2003的excel,返回true是2003171public static boolean isExcel2003(String filePath) {172return filePath.matches("^.+\\.(?i)(xls)$");173 }174175// @描述:是否是2007的excel,返回true是2007176public static boolean isExcel2007(String filePath) {177return filePath.matches("^.+\\.(?i)(xlsx)$");178 }179180 }。

ExcelToCi导数据步骤

ExcelToCi导数据步骤

1、组件接口在JAVA中的应用:<1>在JAVA中建立API:如果计划组件接口访问Java的外部应用程序,就必须创建一个组件接口的API 。

这些API的形式为*. Java源代码文件,这些文件应汇编成Java类。

构建组件接口绑定执行如下步骤:(1)在Application Desinger中任意打开一个组件接口的定义,所构建的API对任何组件接口都是开放的;(2)选择Build,PeopleSoft APIs;(3)选择Build复选框,target directory选择JAVA类源文件被创建的目录,这个目录通常是<PS_HOME>\class.(4)单击Ok确定所选择的绑定;(5)用如下命令编译所生成的API,cd %PS_HOME%\class\PeopleSoft\Generated\CompIntfcjavac −classpath %PS_HOME%\class\psjoa.jar *.javacd c:\pt8\class\PeopleSoft\Generated\PeopleSoftjavac −classpath %PS_HOME%\class\psjoa.jar *.java<2>设置JAVA环境:当部署组件接口本地客户机或Web服务器的Java绑定时,必须具备如下条件:(1)第三方Java应用程序;(2)应用服务器和数据库;(3)JAVA虚拟机JVM和JAVA开发工具JDK。

应用JAVA建立客户机访问组件接口的步骤如下所示:(1)JDK和JVM的安装;(2)设置环境变量PATH,如:c:\bea\jdk151\jre\bin\client;(3)设置环境变量CLASSPATH,如:A,文件psjoa.jar 通常是<PS_HOME>\class\psjoa.jar。

<3>生成JAVA一个运行代码模板:(1)在Application Desinger中任意打开一个组件接口的定义;、(2)单击右键,显示弹出式菜单;(3)选择Generate Java Template,编辑模板文件,修改器源代码满足目标需求;(4)编译源代码,生成一个类文件;<4>使用和理解生成的JAVA代码:2、组件接口在PeopleCode中的应用:3、组件接口在Excel中的应用:组件接口可以从Excel表格中加载数据到数据库,每一个源工作簿包含Excel工作表和Visual Basic代码模块,执行每个事务的业务逻辑。

easyexcel 用法

easyexcel 用法

easyexcel 用法
easyexcel是一款优秀的Java开发工具,它可以帮助我们轻松地实现 Excel 文件的导入导出功能。

下面介绍一下 easyexcel 的用法:
1. 导入 Excel 文件
使用 easyexcel 可以轻松地将 Excel 文件导入到数据库中。

我们只需要定义好对应的实体类,然后通过 @ExcelProperty 注解来指定实体类中的字段与 Excel 中的列的对应关系,就可以将 Excel 文件中的数据导入到数据库中了。

2. 导出 Excel 文件
使用 easyexcel 可以轻松地将数据库中的数据导出到 Excel
文件中。

我们只需要定义好对应的实体类,然后通过 @ExcelProperty 注解来指定实体类中的字段与 Excel 中的列的对应关系,就可以将数据库中的数据导出到 Excel 文件中了。

3. 大数据量导入导出
easyexcel 支持大数据量的导入导出操作。

我们可以通过指定每次读取或写入的数据行数,来实现对大数据量的高效处理。

4. 多线程处理
easyexcel 内置了多线程处理机制,可以实现对大数据量的高效处理。

我们可以通过指定线程数来实现多线程处理,从而提高导入导出的效率。

5. 自定义样式
easyexcel 支持自定义样式的设置,可以通过定义样式类来实现对 Excel 文件中各种元素的样式设置,从而实现更加丰富的导出效果。

easyexcel 是一款十分强大的 Java 开发工具,它可以帮助我们轻松地实现 Excel 文件的导入导出功能。

我们可以根据实际需求选择不同的用法,来实现对 Excel 文件的高效操作。

Java实现批量导入excel表格数据到数据库中的方法

Java实现批量导入excel表格数据到数据库中的方法

Java实现批量导⼊excel表格数据到数据库中的⽅法本⽂实例讲述了Java实现批量导⼊excel表格数据到数据库中的⽅法。

分享给⼤家供⼤家参考,具体如下:1、创建导⼊抽象类package mon.excel;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.PrintStream;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder.SheetRecordCollectingListener;import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener;import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;import org.apache.poi.hssf.eventusermodel.HSSFListener;import org.apache.poi.hssf.eventusermodel.HSSFRequest;import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener;import stCellOfRowDummyRecord;import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;import org.apache.poi.hssf.model.HSSFFormulaParser;import org.apache.poi.hssf.record.BOFRecord;import org.apache.poi.hssf.record.BlankRecord;import org.apache.poi.hssf.record.BoolErrRecord;import org.apache.poi.hssf.record.BoundSheetRecord;import org.apache.poi.hssf.record.FormulaRecord;import belRecord;import belSSTRecord;import org.apache.poi.hssf.record.NoteRecord;import org.apache.poi.hssf.record.NumberRecord;import org.apache.poi.hssf.record.RKRecord;import org.apache.poi.hssf.record.Record;import org.apache.poi.hssf.record.SSTRecord;import org.apache.poi.hssf.record.StringRecord;import ermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;/*** 导⼊抽象类* Created by charlin on 2017/9/7.*/public abstract class HxlsAbstract implements HSSFListener {private int minColumns;private POIFSFileSystem fs;private PrintStream output;private int lastRowNumber;private int lastColumnNumber;/** Should we output the formula, or the value it has? */private boolean outputFormulaValues = true;/** For parsing Formulas */private SheetRecordCollectingListener workbookBuildingListener;private HSSFWorkbook stubWorkbook;// Records we pick up as we processprivate SSTRecord sstRecord;private FormatTrackingHSSFListener formatListener;/** So we known which sheet we're on */private int sheetIndex = -1;private BoundSheetRecord[] orderedBSRs;@SuppressWarnings("unchecked")private ArrayList boundSheetRecords = new ArrayList();// For handling formulas with string resultsprivate int nextRow;private int nextColumn;private boolean outputNextStringRecord;private int curRow;private List<String> rowlist;@SuppressWarnings( "unused")private String sheetName;public HxlsAbstract(POIFSFileSystem fs)throws SQLException {this.fs = fs;this.output = System.out;this.minColumns = -1;this.curRow = 0;this.rowlist = new ArrayList<String>();}public HxlsAbstract(String filename) throws IOException,FileNotFoundException, SQLException {this(new POIFSFileSystem(new FileInputStream(filename)));}//excel记录⾏操作⽅法,以⾏索引和⾏元素列表为参数,对⼀⾏元素进⾏操作,元素为String类型// public abstract void optRows(int curRow, List<String> rowlist) throws SQLException ;//excel记录⾏操作⽅法,以sheet索引,⾏索引和⾏元素列表为参数,对sheet的⼀⾏元素进⾏操作,元素为String类型 public abstract void optRows(int sheetIndex,int curRow, List<String> rowlist) throws Exception;/*** 遍历 excel ⽂件*/public void process() throws IOException {MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this);formatListener = new FormatTrackingHSSFListener(listener);HSSFEventFactory factory = new HSSFEventFactory();HSSFRequest request = new HSSFRequest();if (outputFormulaValues) {request.addListenerForAllRecords(formatListener);} else {workbookBuildingListener = new SheetRecordCollectingListener(formatListener);request.addListenerForAllRecords(workbookBuildingListener);}factory.processWorkbookEvents(request, fs);}/*** HSSFListener 监听⽅法,处理 Record*/@SuppressWarnings("unchecked")public void processRecord(Record record) {int thisRow = -1;int thisColumn = -1;String thisStr = null;String value = null;switch (record.getSid()) {case BoundSheetRecord.sid:boundSheetRecords.add(record);break;case BOFRecord.sid:BOFRecord br = (BOFRecord) record;//进⼊sheetif (br.getType() == BOFRecord.TYPE_WORKSHEET) {// Create sub workbook if requiredif (workbookBuildingListener != null && stubWorkbook == null) {stubWorkbook = workbookBuildingListener.getStubHSSFWorkbook();}// Works by ordering the BSRs by the location of// their BOFRecords, and then knowing that we// process BOFRecords in byte offset ordersheetIndex++;if (orderedBSRs == null) {orderedBSRs = BoundSheetRecord.orderByBofPosition(boundSheetRecords);}sheetName = orderedBSRs[sheetIndex].getSheetname();}break;case SSTRecord.sid:sstRecord = (SSTRecord) record;break;case BlankRecord.sid:BlankRecord brec = (BlankRecord) record;thisRow = brec.getRow();thisColumn = brec.getColumn();thisStr = "";break;case BoolErrRecord.sid:BoolErrRecord berec = (BoolErrRecord) record;thisRow = berec.getRow();thisColumn = berec.getColumn();thisStr = "";break;case FormulaRecord.sid:FormulaRecord frec = (FormulaRecord) record;thisRow = frec.getRow();thisColumn = frec.getColumn();if (outputFormulaValues) {if (Double.isNaN(frec.getValue())) {// Formula result is a string// This is stored in the next recordoutputNextStringRecord = true;nextRow = frec.getRow();nextColumn = frec.getColumn();} else {thisStr = formatListener.formatNumberDateCell(frec);}} else {thisStr = '"' + HSSFFormulaParser.toFormulaString(stubWorkbook, frec.getParsedExpression()) + '"';}break;case StringRecord.sid:if (outputNextStringRecord) {// String for formulaStringRecord srec = (StringRecord) record;thisStr = srec.getString();thisRow = nextRow;thisColumn = nextColumn;outputNextStringRecord = false;}break;case LabelRecord.sid:LabelRecord lrec = (LabelRecord) record;curRow = thisRow = lrec.getRow();thisColumn = lrec.getColumn();value = lrec.getValue().trim();value = value.equals("")?" ":value;this.rowlist.add(thisColumn, value);break;case LabelSSTRecord.sid:LabelSSTRecord lsrec = (LabelSSTRecord) record;curRow = thisRow = lsrec.getRow();thisColumn = lsrec.getColumn();if (sstRecord == null) {rowlist.add(thisColumn, " ");} else {value = sstRecord.getString(lsrec.getSSTIndex()).toString().trim();value = value.equals("")?" ":value;rowlist.add(thisColumn,value);}break;case NoteRecord.sid:NoteRecord nrec = (NoteRecord) record;thisRow = nrec.getRow();thisColumn = nrec.getColumn();// TODO: Find object to match nrec.getShapeId()thisStr = '"' + "(TODO)" + '"';break;case NumberRecord.sid:NumberRecord numrec = (NumberRecord) record;curRow = thisRow = numrec.getRow();thisColumn = numrec.getColumn();value = formatListener.formatNumberDateCell(numrec).trim();value = value.equals("")?" ":value;// Formatrowlist.add(thisColumn, value);break;case RKRecord.sid:RKRecord rkrec = (RKRecord) record;thisRow = rkrec.getRow();thisColumn = rkrec.getColumn();thisStr = '"' + "(TODO)" + '"';break;default:break;}// 遇到新⾏的操作if (thisRow != -1 && thisRow != lastRowNumber) {lastColumnNumber = -1;}// 空值的操作if (record instanceof MissingCellDummyRecord) {MissingCellDummyRecord mc = (MissingCellDummyRecord) record;curRow = thisRow = mc.getRow();thisColumn = mc.getColumn();rowlist.add(thisColumn," ");}// 如果遇到能打印的东西,在这⾥打印if (thisStr != null) {if (thisColumn > 0) {output.print(',');}output.print(thisStr);}// 更新⾏和列的值if (thisRow > -1)lastRowNumber = thisRow;if (thisColumn > -1)lastColumnNumber = thisColumn;// ⾏结束时的操作if (record instanceof LastCellOfRowDummyRecord) {if (minColumns > 0) {// 列值重新置空if (lastColumnNumber == -1) {lastColumnNumber = 0;}}// ⾏结束时,调⽤ optRows() ⽅法lastColumnNumber = -1;try {optRows(sheetIndex,curRow, rowlist);} catch (Exception e) {e.printStackTrace();}rowlist.clear();}}}2、创建导⼊接⼝package mon.excel;import java.util.List;public interface HxlsOptRowsInterface {public static final String SUCCESS="success";/*** 处理excel⽂件每⾏数据⽅法* @param sheetIndex* @param curRow* @param rowlist* @return success:成功,否则为失败原因* @throws Exception*/public String optRows(int sheetIndex, int curRow, List<String> rowlist) throws Exception; }3、创建实现类,在这个⽅法实现把导⼊的数据添加到数据库中package mon.excel;import java.util.List;public class HxlsInterfaceImpl implements HxlsOptRowsInterface {@Overridepublic String optRows(int sheetIndex, int curRow, List<String> datalist)throws Exception {//在这⾥执⾏数据的插⼊//System.out.println(rowlist);//saveData(datalist);return "";}}4、导⼊⼯具实现package mon.excel;import java.io.FileNotFoundException;import java.io.IOException;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;/*** excel导⼊⼯具* Created by charlin on 2017/9/7.*/public class ExcelImportUtil extends HxlsAbstract{//数据处理beanprivate HxlsOptRowsInterface hxlsOptRowsInterface;//处理数据总数private int optRows_sum = 0;//处理数据成功数量private int optRows_success = 0;//处理数据失败数量private int optRows_failure = 0;//excel表格每列标题private List<String> rowtitle ;//失败数据private List<List<String>> failrows;//失败原因private List<String> failmsgs ;//要处理数据所在的sheet索引,从0开始private int sheetIndex;public ExcelImportUtil(String filename, int sheetIndex, HxlsOptRowsInterface hxlsOptRowsInterface) throws IOException, FileNotFoundException, SQLException {super(filename);this.sheetIndex = sheetIndex;this.hxlsOptRowsInterface = hxlsOptRowsInterface;this.rowtitle = new ArrayList<String>();this.failrows = new ArrayList<List<String>>();this.failmsgs = new ArrayList<String>();}@Overridepublic void optRows(int sheetIndex,int curRow, List<String> rowlist) throws Exception {/*for (int i = 0 ;i< rowlist.size();i++){System.out.print("'"+rowlist.get(i)+"',");}System.out.println();*///将rowlist的长度补齐和标题⼀致int k=rowtitle.size()-rowlist.size();for(int i=0;i<k;i++){rowlist.add(null);}if(sheetIndex == this.sheetIndex){optRows_sum++;if(curRow == 0){//记录标题rowtitle.addAll(rowlist);}else{String result = hxlsOptRowsInterface.optRows(sheetIndex, curRow, rowlist);if(!result.equals(hxlsOptRowsInterface.SUCCESS)){optRows_failure++;//失败数据failrows.add(new ArrayList<String>(rowlist));failmsgs.add(result);}else{optRows_success++;}}}}public long getOptRows_sum() {return optRows_sum;}public void setOptRows_sum(int optRows_sum) {this.optRows_sum = optRows_sum;}public long getOptRows_success() {return optRows_success;}public void setOptRows_success(int optRows_success) {this.optRows_success = optRows_success;}public long getOptRows_failure() {return optRows_failure;}public void setOptRows_failure(int optRows_failure) {this.optRows_failure = optRows_failure;}public List<String> getRowtitle() {return rowtitle;}public List<List<String>> getFailrows() {return failrows;}public List<String> getFailmsgs() {return failmsgs;}public void setFailmsgs(List<String> failmsgs) {this.failmsgs = failmsgs;}}5、导⼊实现⽅法:public static void main(String[] args){ExcelImportUtil importUtil;try {importUtil = new ExcelImportUtil("d:/data.xls",0, new HxlsInterfaceImpl());importUtil.process();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}更多关于java相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》及《》希望本⽂所述对⼤家java程序设计有所帮助。

java中使用JDBC的preparedStatement批处理数据的添加

java中使用JDBC的preparedStatement批处理数据的添加

java中使⽤JDBC的preparedStatement批处理数据的添加在项⽬中我们偶尔可能会遇到批量向数据库中导⼊数据,如果批处理的情况较多的情况下可以使⽤spring batch,如果只是⼀个导⼊功能的话可以考虑使⽤jdbc的preparedStatement处理。

1.使⽤逻辑,⾸先根据导⼊的⽂件,将数据转换成我们的对象放进list集合中。

2.创建preparedStatement对象,处理数据。

下⾯是具体的⽰例:1.创建表:CREATE TABLE TEST(ID VARCHAR2(50) NOT NULL,NAME VARCHAR2(50) NOT NULL,HOME VARCHAR2(50) NOT NULL,TEL VARCHAR2(50) NOT NULL,PATH VARCHAR2(50))2.实体类:@Getter@Setter@ToStringpublic class TestModel {private String id;private String name;private String home;private String tel;private String path;}3.Dao层:@Mapperpublic interface TestDao {public List<TestModel> selectList();public void addData(List<TestModel> list);}4.mapper.xml:<mapper namespace="com.jason.springboot.demo.web.dao.TestDao"><select id="selectList" resultType="com.jason.springboot.demo.web.pojo.TestModel">selectid id,name name,home home,tel tel,path pathfromtest</select><insert id="addData" parameterType="com.jason.springboot.demo.web.pojo.TestModel">INSERT INTOTESTVALUES(#{id},#{name},#{home},#{tel},#{path})</insert></mapper>5.批处理类:/*** 使⽤JDBC preparedStatement批处理数据**/@Servicepublic class SqlBatch {@Autowiredprivate SqlSessionFactory sqlSessionFactory;public static final String MAPPER_01 = "com.jason.springboot.demo.web.dao.TestDao.addData"; public static final String SQL_ADD = "INSERT INTO TEST VALUES(?,?,?,?,?)";public void batchSelect(List<TestModel> list) {String sql = "";SqlSession session = null;PreparedStatement prepareStatement = null;try {if (list == null || list.isEmpty()) {return;}Map<String, Object> map = new HashMap<String, Object>();map.put("id", list.get(0).getId());map.put("name", list.get(0).getName());map.put("home", list.get(0).getHome());map.put("tel", list.get(0).getTel());map.put("path", list.get(0).getPath());sql = getSql(MAPPER_01, map);// 或者// sql=SQL_ADD ;session = sqlSessionFactory.openSession(ExecutorType.BATCH, true);prepareStatement = session.getConnection().prepareStatement(sql);for (TestModel model : list) {prepareStatement.setString(1, model.getId());prepareStatement.setString(2, model.getName());prepareStatement.setString(3, model.getHome());prepareStatement.setString(4, model.getTel());prepareStatement.setString(5, model.getPath());prepareStatement.addBatch();}int[] executeBatch = prepareStatement.executeBatch();System.out.println(executeBatch);} catch (SQLException e) {System.out.println("批量处理SQL异常:" + e);} catch (Exception e) {System.out.println("批处理添加数据异常:" + e);} finally {try {prepareStatement.close();} catch (SQLException e) {System.out.println("关闭批处理异常:" + e);}}}// 根据参数从MyBatis中获取对应的sqlprivate String getSql(String mapper, Map<String, Object> param) {return sqlSessionFactory.getConfiguration().getMappedStatement(mapper).getBoundSql(param).getSql(); }}6.Controller类,测试添加数据:@RestControllerpublic class DemoController {@Autowiredprivate TestService testService;@Autowiredprivate SqlBatch sqlBatch;private static final Logger LOGGER = LoggerFactory.getLogger(DemoController.class);@RequestMapping("/test")public String test1() {addData();List<TestModel> selectList = testService.selectList();List<TestModel> newList = new ArrayList<>();newList.addAll(selectList.subList(0, 20)); for (TestModel testModel : newList) {("数据:{}", testModel.toString());}newList.clear();return " spring boot is starting ....";}private void addData() {long start = System.currentTimeMillis(); // 造数据List<TestModel> list = new ArrayList<TestModel>();for (int i = 0; i < 50000; i++) {TestModel model = new TestModel();model.setId(UUID.randomUUID().toString().replace("-", "")); model.setName("姓名" + i);model.setHome("家庭地址" + i);model.setTel("联系电话" + i);model.setPath("URL:" + i);list.add(model);} // 批量添加sqlBatch.batchSelect(list);long end = System.currentTimeMillis();("总共耗时:[{}]", (end - start));}}。

java excel导入20万条

java excel导入20万条

java excel导入20万条
在Java中导入20万条Excel数据可以通过以下几种方式来实现:
1. 使用Apache POI库,Apache POI是一个用于读写Microsoft Office文件的开源Java库。

你可以使用Apache POI来读取Excel文件并将数据导入到Java中。

你需要使用XSSFWorkbook和XSSFSheet类来读取Excel文件中的数据。

然后,你可以将读取到的数据存储在Java对象中,或者直接将数据插入到数据库中。

2. 使用JDBC连接Excel文件,你可以使用JDBC(Java Database Connectivity)来连接Excel文件,并通过Java代码将数据导入到数据库中。

首先,你需要使用ODBC(Open Database Connectivity)驱动程序来连接Excel文件,然后使用JDBC来执行插入操作。

3. 使用第三方库,除了Apache POI之外,还有一些其他的第三方库可以用来处理Excel文件,比如JExcelApi、JExcel等。

你可以选择适合你需求的库来实现数据导入操作。

无论你选择哪种方式,都需要注意以下几点:
内存管理,在导入大量数据时,需要注意内存的使用,避免内存溢出的问题。

优化性能,对于大量数据的导入,需要考虑性能优化,比如批量插入、使用索引等方式来提高导入速度。

异常处理,需要处理可能出现的异常情况,比如文件不存在、格式错误等。

总之,导入20万条Excel数据是一个比较大的任务,需要仔细考虑数据量、性能和异常处理等方面的问题,选择合适的方式来实现数据导入操作。

Java解析Excel文件并把数据存入数据库

Java解析Excel文件并把数据存入数据库

Java解析Excel⽂件并把数据存⼊数据库前段时间做⼀个⼩项⽬,为了同时存储多条数据,其中有⼀个功能是解析Excel并把其中的数据存⼊对应数据库中。

花了两天时间,不过⼀天多是因为⽤了"upload"关键字作为URL从⽽导致总报同⼀个错,最后在同学的帮助下顺利解决,下⾯我把⾃⼰⽤"POI"解析的⽅法总结出来供⼤家参考(我⽤的是SpingMVC和hibernate框架)。

1.web.xml中的配置⽂件web.xml中的配置⽂件就按照这种⽅式写,只需要把"application.xml"换成你的配置⽂件名即可<!--⽂件上传对应的配置⽂件--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:application.xml</param-value></context-param>2.application.xml的配置⽂件(固定写发)在这个配置⽂件中你还可以规定上传⽂件的格式以及⼤⼩等多种属性限制<!-- 定义⽂件上传解析器 --><bean id="multipartResolver"class="monsMultipartResolver"></bean>3.⽂件上传的前端HTML注意:1.enctype="multipart/form-data" 必须写,封装表单2.method="post",提交⽅式必须为"post"提交3.action="${text}/uploadfile", "uploadfile"切记不要写成"upload",否则你找到世界末⽇也不会找到哪⾥有问题(本⼈因为这个折腾了⼀天多时间)。

Java实现Excel导入数据库,数据库中的数据导入到Excel

Java实现Excel导入数据库,数据库中的数据导入到Excel

Java实现Excel导⼊数据库,数据库中的数据导⼊到Excel maven 加⼊mysql包和处理Excel的jar包<dependencies><!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6.12</version></dependency></dependencies>数据库:⽤户表CREATE TABLE `user_info` (`user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '⽤户ID',`user_name` varchar(50) NOT NULL COMMENT '⽤户名称',`email` varchar(50) DEFAULT NULL COMMENT '邮箱',`mobile` varchar(20) NOT NULL COMMENT '⼿机号',`password` varchar(30) DEFAULT NULL COMMENT '登录密码',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建⽇期',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新⽇期',`del_flg` char(1) DEFAULT '0' COMMENT '删除flag 0:未删除;1:已删除;',PRIMARY KEY (`user_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='⽤户信息';⼯具类:public class DBhepler {String driver = "com.mysql.jdbc.Driver";String url = "jdbc:mysql://url:3306/数据库名";Connection con = null;ResultSet res = null;public void DataBase() {try {Class.forName(driver);con = DriverManager.getConnection(url, "⽤户名", "密码");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blockSystem.err.println("装载 JDBC/ODBC 驱动程序失败。

利用VBA实现Excel与MySQL数据库的数据读写与处理

利用VBA实现Excel与MySQL数据库的数据读写与处理

利用VBA实现Excel与MySQL数据库的数据读写与处理VBA(Visual Basic for Applications)是一种编程语言,可以用于自动化处理Microsoft Office软件中的任务。

在Excel中,VBA可以实现与MySQL数据库的数据读写与处理,提高数据分析和处理的效率。

本文将探讨如何使用VBA编程来实现Excel与MySQL数据库之间的数据交互和处理。

首先,我们需要在Excel中启用开发者选项,以便能够使用VBA编程。

在Excel的工具栏中点击“文件”,然后选择“选项”,进入Excel选项窗口。

选择“自定义功能区”,勾选“开发者”选项卡,点击“确定”保存设置。

接下来,我们需要打开VBA编辑器。

在Excel中,点击开发者选项卡中的“Visual Basic”按钮,即可进入VBA编辑器。

一、连接MySQL数据库在VBA编辑器中,首先需要添加对Microsoft ActiveX Data Objects库的引用。

选择“工具”菜单下的“引用”,在弹出的“引用”对话框中选中“Microsoft ActiveX Data Objects x.x Library”,点击“确定”。

然后,我们可以使用以下代码来连接MySQL数据库。

```vbaPublic Function ConnectMySQL() As ObjectDim conn As ObjectSet conn = CreateObject("ADODB.Connection")conn.ConnectionString = "DRIVER={MySQL ODBC 5.3 ANSI Driver};" _& "SERVER=your_server_address;" _& "DATABASE=your_database_name;" _& "USER=your_username;" _& "PASSWORD=your_password;"conn.OpenSet ConnectMySQL = connEnd Function```请确保将上述代码中的`your_server_address`、`your_database_name`、`your_username`和`your_password`替换为实际的MySQL数据库连接信息。

java 使用jxl技术excel文件进行导入和导出实验用到的知识与技术

java 使用jxl技术excel文件进行导入和导出实验用到的知识与技术

java 使用jxl技术excel文件进行导入和导出实验用到的知识与技术Java是一种流行的编程语言,而JXL技术是一种用于处理Excel文件的Java库。

在本文中,我们将一步一步地介绍如何使用JXL技术导入和导出Excel文件。

我们将从JXL技术的概述开始,然后讨论如何导入Excel文件,接着是如何导出Excel文件。

JXL技术是一个基于Java的开源库,用于读取、写入和操作Microsoft Excel文件。

它提供了一组API,可以方便地处理Excel文件中的单元格、行和列。

不仅可以读取现有的Excel文件,还可以创建新的Excel文件并在其中写入数据。

JXL技术支持Excel的各种版本,包括xls和xlsx格式。

接下来,我们将讨论如何导入Excel文件。

首先,我们需要在项目中引入JXL库的依赖。

在Maven项目中,我们可以将以下依赖添加到pom.xml 文件中:xml<dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6.12</version></dependency>一旦我们引入了JXL依赖,我们就可以使用它的API来导入Excel文件。

首先,我们需要创建一个Workbook对象,它代表整个Excel文件。

我们可以使用Workbook类的静态方法getWorkbook()来打开一个现有的Excel文件,例如:javaWorkbook workbook = Workbook.getWorkbook(newFile("path/to/excel.xls"));在Workbook对象上,我们可以执行各种操作,例如获取特定的工作表、读取单元格的值等。

Java-Excel表数据转List对象-导入数据库

Java-Excel表数据转List对象-导入数据库

Java-Excel表数据转List对象-导⼊数据库 1import java.io.File;2import java.io.FileInputStream;3import java.util.ArrayList;4import java.util.List;56import ermodel.HSSFCell;7import ermodel.HSSFRow;8import ermodel.HSSFSheet;9import ermodel.HSSFWorkbook;101112public class ObjectExcelRead {1314/**15 * @param filepath //⽂件路径16 * @param filename //⽂件名17 * @param startrow //开始⾏号18 * @param startcol //开始列号19 * @param sheetnum //sheet20 * @return list21*/22public static List<Object> readExcel(String filepath, String filename, int startrow, int startcol, int sheetnum) {23 List<Object> varList = new ArrayList<Object>();2425try {26 File target = new File(filepath, filename);27 FileInputStream fi = new FileInputStream(target);28 HSSFWorkbook wb = new HSSFWorkbook(fi);2930// sheet从0开始31 HSSFSheet sheet = wb.getSheetAt(sheetnum);32// 取得最后⼀⾏的⾏号33int rowNum = sheet.getLastRowNum() + 1;3435// ⾏循环开始36for (int i = startrow; i < rowNum; i++) {37 PageData varpd = new PageData();38// ⾏39 HSSFRow row = sheet.getRow(i);40// 每⾏的最后⼀个单元格位置41int cellNum = row.getLastCellNum();4243//列循环开始44for (int j = startcol; j < cellNum; j++) {45 HSSFCell cell = row.getCell(Short.parseShort(j + ""));46 String cellValue = null;4748if (null != cell) {49// 判断excel单元格内容的格式,并对其进⾏转换,以便插⼊数据库50switch (cell.getCellType()) {51case 0:52 cellValue = String.valueOf((int) cell.getNumericCellValue());53break;5455case 1:56 cellValue = cell.getStringCellValue();57break;5859case 2:60 cellValue = cell.getNumericCellValue() + "";61// cellValue = String.valueOf(cell.getDateCellValue());62break;6364case 3:65 cellValue = "";66break;6768case 4:69 cellValue = String.valueOf(cell.getBooleanCellValue());70break;7172case 5:73 cellValue = String.valueOf(cell.getErrorCellValue());74break;7576 }77 } else {78 cellValue = "";79 }8081 varpd.put("var"+j, cellValue);82 }83 varList.add(varpd);84 }85 } catch (Exception e) {86 System.out.println(e);87 }8889return varList;90 }91 }。

批量处理数据Excel中的数据导入与导出技巧

批量处理数据Excel中的数据导入与导出技巧

批量处理数据Excel中的数据导入与导出技巧在日常的工作和生活中,我们经常需要处理大量的数据。

而Excel 作为一款功能强大的电子表格软件,为我们提供了便捷的数据处理工具。

本文将介绍一些在Excel中批量处理数据的技巧,包括数据导入和导出的方法与技巧,帮助您提高工作效率。

一、数据导入技巧1. 批量导入文本数据在Excel中,我们可以通过以下两种方法批量导入文本数据:方法一:选择“数据”选项卡中的“从文本”命令,然后选择需要导入的文本文件,按照向导逐步操作即可。

方法二:直接将需要导入的文本文件拖拽到Excel的工作表中,Excel会自动将文本数据导入到工作表中。

2. 批量导入数据库数据当我们需要将数据库中的大量数据导入到Excel中进行处理时,可以使用以下方法:方法一:选择“数据”选项卡中的“从其他来源”命令,然后选择数据库相关的选项,按照向导逐步操作即可。

方法二:使用VBA宏编程,在Excel中编写相应的代码实现数据库数据的导入。

3. 批量导入网页数据有时候我们需要从网页中导入大量的数据到Excel中进行分析,可以使用以下方法:方法一:选择“数据”选项卡中的“从Web”命令,然后输入网页地址,按照向导逐步操作即可。

方法二:通过VBA宏编程,使用网络请求技术获取网页数据并导入到Excel中。

二、数据导出技巧1. 批量导出为文本文件如果我们需要将Excel中的数据批量导出为文本文件,可以使用以下方法:方法一:选择需要导出的数据,然后选择“文件”选项卡中的“另存为”命令,在另存为类型中选择“Unicode文本”或“逗号分隔值”等文本格式,保存即可。

方法二:使用VBA宏编程,在Excel中编写相应的代码实现数据的导出。

2. 批量导出为数据库文件当我们需要将Excel中的数据批量导出为数据库文件时,可以使用以下方法:方法一:选择需要导出的数据,然后选择“文件”选项卡中的“另存为”命令,在另存为类型中选择数据库相关的格式,保存即可。

SpringBoot实现Excel导入导出好用到爆POI可以扔掉了

SpringBoot实现Excel导入导出好用到爆POI可以扔掉了

SpringBoot实现Excel导入导出好用到爆POI可以扔掉了SpringBoot是一个适用于开发Java应用程序的开源框架,可以用于构建独立的、可扩展且高效的应用程序。

在SpringBoot中,我们可以很方便地实现Excel的导入和导出功能,而且使用起来非常简单方便,大大提高了开发效率。

在传统的Java应用程序开发中,我们通常使用Apache POI这个库来处理Excel文件。

POI是一个非常强大的Java库,可以读写Excel文件,但是使用起来相对麻烦,并且需要大量的代码来处理各种复杂的Excel格式。

而在SpringBoot中,我们可以使用一些开源的库来简化Excel的导入导出操作,例如EasyExcel、JExcel和Apache POI提供的SXSSFWorkbook等。

首先,我们来看一下如何实现Excel的导入功能。

在SpringBoot中,我们可以使用EasyExcel这个库来实现Excel的导入功能。

EasyExcel是阿里巴巴开源的一个用于读写Excel文件的Java库,与Apache POI相比,EasyExcel的使用更加简洁高效。

要使用EasyExcel实现Excel的导入功能,我们只需要引入EasyExcel的依赖,并编写一些简单的代码即可。

下面是一个示例:1. 首先,我们需要在pom.xml文件中添加EasyExcel的依赖:```xml<dependency><artifactId>easyexcel</artifactId><version>2.2.11</version></dependency>```2. 接下来,我们需要创建一个用于处理Excel导入的Controller类,例如:```javapublic class ExcelControllertryEasyExcel.read(file.getInputStream(, ExcelData.class, new ExcelDataListener().sheet(.doRead(;return "导入成功";} catch (IOException e)e.printStackTrace(;return "导入失败";}}```3. 最后,我们需要创建一个实现`AnalysisEventListener`接口的类,用于处理Excel文件的数据。

JAVA实现Excel表数据导入ORACLE数据库

JAVA实现Excel表数据导入ORACLE数据库

在一个JA V A应用中,如果要把己知的一张Excel表数据导入一个己知的ORACLE表中,可以根据ODBC读取这张Excel表等操作来完成相关功能。

具体代码如下:public class InsertData {public static void main(String[] args) {Connection myConnSDB = null;PreparedStatement psInsertData = null;int InsertData = 0;try {Class.forName("oracle.jdbc.driver.OracleDriver");myConnSDB = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.202:1521:ORCL", "system","ORCL");System.out.println(myConnSDB);} catch (Exception e) {e.printStackTrace();}try {Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con = DriverManager.getConnection("jdbc:odbc:Book1");Statement st = con.createStatement();ResultSet rs = st.executeQuery("SELECT * FROM [Sheet1$]");psInsertData = myConnSDB.prepareStatement("INSERT INTO test1"+ " (NAME,PASS)" + " V ALUES " + " (?,?) ");while (rs.next()) {psInsertData.clearParameters();psInsertData.setString(1, rs.getString(1));psInsertData.setString(2, rs.getString(2));psInsertData.executeUpdate();}System.out.println("" + InsertData);st.close();con.close();} catch (Exception ex) {System.err.print("Exception: ");System.err.println(ex.getMessage());ex.printStackTrace();} finally {try {if (psInsertData != null) {psInsertData.close();}if (myConnSDB != null) {myConnSDB.close();}} catch (SQLException e) {e.printStackTrace();}}}}在一个WEB应用中,根据一个Excel表,一个ORACLE表,导入ORACLE中,这里用到了连接池,jxl.jar和commons-dbutils-1.1.jar。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(SQLServer)
库入数据处理Excel数据导批Java实现注:这是我之前写的Java实现批处理Excel数据导入数据库代码,绝对原创(最初发表于百度博客),可以实现批量处理,效率很高。

使用时,里面有些(尤其那些红色部分)地方需要改为自己的数据信息。

package com.jxl;
import jxl.Cell;
import jxl.Sheet;
import java.io.File;
import java.io.InputStream;
import java.sql.*;
import java.util.Vector;
import java.io.FileInputStream;
import jxl.Workbook;
/**
* 耗时315.469秒jxl.jar excel导入SQL 包
* 耗时131.469秒
* 耗时125.448秒(系数6000)
*/
public class ExcelReadPre {
public static void main(String[] args) {
ExcelReadPre cr = new ExcelReadPre();
long start = System.currentTimeMillis();// 记录开始时间
cr.testRun();// 开始执行
long end = System.currentTimeMillis();
System.out.println(============耗時:==== + ((end - start) / 1000.0));
}
public void testRun() {
\\k0527\\;//自己存放excel文件的目录瑓楲杮瀠瑡??F:\\学习
try {
File fileDir = new File(path);
File files[] = fileDir.listFiles();
for (int i = 0; i < files.length; i++) {
System.out.println(P第?椨??个文件:===== + files[i].getAbsolutePath());
this.writeToDb(files[i].getAbsolutePath());
}
if (this.con != null && !con.isClosed()) {
this.con.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* 执行指定的Sql
*/
private String url = jdbc:sqlserver://127.0.0.1:1433;database=moble_db;//自己的数据库名称
private Connection con = null;
PreparedStatement pst = null;
public void getCOnn() {
// System.out.println(==========+sql);
try {
if (con == null || con.isClosed()) {
Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);
con = DriverManager.getConnection(url, 獜屡?獜??);//这里数据库的用户名和密码
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 导入一指定文件数据
* 批处理SQL
* @param filePath
*/
public void writeToDb(String filePath) {
//这里是我自己的表结构
String sql = insert into msg_mobile (spcode,spname,bizcode,bizname,flow,cost,downdate)values (?,?,?,?,?,?,?);
try {
this.getCOnn();
关闭事务自动提交//
con.setAutoCommit(false);
pst = con.prepareStatement(sql);
Vector<Cell[]> v = readExcel(filePath);
int i = 0;
for (Cell[] cells : v) {
int j = 0;
pst.setString(++j, cells[j].getContents());
pst.setString(++j, cells[j].getContents());
pst.setString(++j, cells[j].getContents());
pst.setString(++j, cells[j].getContents());
pst.setString(++j, cells[j].getContents());
pst.setString(++j, cells[j].getContents());
pst.setString(++j, cells[j].getContents());
pst.addBatch(); i++;
if(i>6000){
//防止一次数量过大,导致内存泄漏
pst.executeBatch(); mit();
pst.clearBatch();
i=0;
continue;
}
SQL命令加入命令列表// 把一个}
// 执行批量更新pst.executeBatch();
语句执行完毕,提交本事务//
mit();
pst.clearBatch();
pst.close();
// System.gc();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
readExcel* 方法名:* 参数:filePath为Execl文件的绝对路径
,放在数组中返回数据* 用途:读取Execl* 返回类型:Vector
**/
public static Vector<Cell[]> readExcel(String filePath) {
Vector<Cell[]> v = new Vector<Cell[]>();
Workbook rwb = null;
try {
InputStream is = new FileInputStream(filePath);
rwb = Workbook.getWorkbook(is);
// 获取第一张Sheet表
Sheet rs = rwb.getSheet(0);
for (int i = 1; i < rs.getRows(); i++) {
// for (int j = 0; j < rs.getColumns(); j++) {
// System.out.print(\+(\+rs.getCell(j,
// k).getContents()).trim());
v.add(rs.getRow(i));// 放入一行记录
// System.out.println(==========+rs.getRow(i)[4].getContents());
// }
// System.out.println();
}
is.close();
rwb.close();
System.gc();
} catch (Exception e) {
e.printStackTrace();
}
return v;
}
}。

相关文档
最新文档