Excel通过POI大数据导入数据库通用方案

合集下载

如何把Excel工作表中数据导入数据库

如何把Excel工作表中数据导入数据库

如何把Excel工作表中数据导入数据库如何把Excel工作表中数据导入数据库大家知道要如何把Excel工作表中数据导入数据库呢?有什么方法呢?下面一起来看看!我想至少有这样两种比较容易实现的方法:1、直接用Sql语句查询2、先用excle中的数据生成xml文件,再把xml导入数据库第一种方法(方法二以后再试),找到联机丛书里实现此功能的Sql 语句如下:SELECT* FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0', 'DataSource="c:Financeaccount.xls";UserID=Admin;Password=;E xtendedproperties=Excel5.0')…xactions语句是有了,但我还是试了很久,因为各个参数具体该怎么设置它没有说。

Data Source就是excel文件的路径,这个简单;UserId、Password和Extended properties这三个属性我改成了各种各样的与本机有关的用户名、密码以及excel版本都不对,最后用上面例子里的.值“User ID=Admin;Password=;Extended properties=Excel 5.0”才成功了,晕啊;最后个“xactions”更是查了很多资料,其实就仅仅是excel文件里所选的工作表名而已,怪我对excel不够熟悉了,另外注意默认的Sheet1要写成[Sheet1$]最后,看看我成功的测试数据库里建好一个表testTable_1,有5个字段id, name, date, money, content,C盘下book1.xls文件的sheet1工作表里写好对应的数据并设好数据类型,执行如下插入语句:intotestTable_1([name],[date],[money],[content]) Select[姓名],[日期],[金额],[内容] FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0','DataSource="C:Book1.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0')…[Sheet1$]select里的列名我一开始用*代替,但发现输出顺序与我预期的不同,是“金额、内容、日期、姓名”,不知道具体有什么规律,就老老实实写名字了。

把Excel数据导入到数据库的方法

把Excel数据导入到数据库的方法

把Excel数据导入到数据库的方法Excel是一个办公很经常用到的一个办公软件,他主要用于数据的分析、查看、对比等,让数据看起来更直观,更容易对比,而有很多时候都会需要把Excel的数据导入到数据库里面,所以今天小编为大家带来了有关于Excel导入到数据库的方法供大家使用、学习。

把Excel数据导入到数据库的方法,步骤如下:Excel导入数据库步骤一:打开SQL Server Management Studio,按图中的路径进入导入数据界面。

Excel导入数据库步骤二:导入的时候需要将EXCEL的文件准备好,不能打开。

点击下一步。

Excel导入数据库步骤三:数据源:选择“Microsoft Excel”除了EXCEL类型的数据,SQL还支持很多其它数据源类型。

Excel导入数据库步骤四:选择需要导入的EXCEL文件。

点击浏览,找到导入的文件确定。

Excel导入数据库步骤五:再次确认文件路径没有问题,点击下一步。

Excel导入数据库步骤六:默认为是使用的WINODWS身份验证,改为使用SQL身份验证。

输入数据库密码,注意:数据库,这里看看是不是导入的数据库。

也可以在这里临时改变,选择其它数据库。

Excel导入数据库步骤七:选择导入数据EXCEL表内容范围,若有几个SHEET表,或一个SHEET表中有些数据我们不想导入,则可以编写查询指定的数据进行导入。

点击下一步。

Excel导入数据库步骤八:选择我们需要导入的SHEET表,比如我在这里将SHEET表名改为price,则导入后生面的SQL数据库表为price$。

点击进入下一步。

Excel导入数据库步骤九:点击进入下一步。

Excel导入数据库步骤十:在这里完整显示了我们的导入的信息,执行内容,再次确认无误后,点击完成,开始执行。

Excel导入数据库步骤十一:可以看到任务执行的过程和进度。

Excel导入数据库步骤十二:执行成功:我们可以看看执行结果,已传输1754行,表示从EXCEL表中导入1754条数据,包括列名标题。

poi根据excel模板文件导出数据

poi根据excel模板文件导出数据

poi根据excel模板文件导出数据Poi是一款用于操作Microsoft Office文件(如Excel、Word和PowerPoint)的Java库。

它提供了丰富的API,使开发人员可以读取、创建和修改这些文件。

在本文中,我们将讨论如何使用Poi库根据Excel 模板文件导出数据。

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

你可以在Maven或Gradle中添加以下依赖项:Maven:```xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>```Gradle:```implementation 'org.apache.poi:poi:4.1.2'implementation 'org.apache.poi:poi-ooxml:4.1.2'```接下来,我们需要加载Excel模板文件。

假设我们有一个名为"template.xlsx"的Excel模板文件,其中包含我们想要导出数据的工作表。

我们可以通过以下代码加载模板文件:```javaFileInputStream fis = new FileInputStream("template.xlsx");Workbook workbook = new XSSFWorkbook(fis);Sheet sheet = workbook.getSheetAt(0); // 假设我们要操作的是第一个工作表```现在我们已经加载了模板文件,接下来我们需要根据Excel模板填充数据。

一种高效的excel表导入数据库的实现方法

一种高效的excel表导入数据库的实现方法

一种高效的 Excel 表导入数据库的实现方法在企业或个人日常工作中,经常需要将 Excel 表格中的数据导入到数据库中。

本文介绍了一种高效的 Excel 表导入数据库的实现方法,该方法可以大大提高数据导入的速度和准确性。

下面是本店铺为大家精心编写的3篇《一种高效的 Excel 表导入数据库的实现方法》,供大家借鉴与参考,希望对大家有所帮助。

《一种高效的 Excel 表导入数据库的实现方法》篇1引言在企业或个人日常工作中,经常需要将 Excel 表格中的数据导入到数据库中。

通常情况下,这种导入需要手动执行,即通过编写 SQL 语句或将数据复制粘贴到数据库管理系统中完成。

这种方法费时费力,且容易出错。

因此,本文介绍了一种高效的 Excel 表导入数据库的实现方法,以提高数据导入的速度和准确性。

实现方法该实现方法主要包括以下步骤:1. 创建一个 Excel 表格,并将需要导入的数据添加到该表格中。

2. 使用 Excel 的“数据”选项卡中的“获取数据”功能,将 Excel 表格中的数据连接到数据库中。

这一步可以使用 Excel 自带的连接器或者使用第三方连接器。

3. 在 Excel 中创建一个新的工作表,并将需要导入的数据添加到该工作表中。

4. 使用 Excel 的“数据”选项卡中的“从其他源导入”功能,将数据从 Excel 工作表中导入到数据库中。

这一步可以使用 Excel 自带的导入器或者使用第三方导入器。

5. 在数据库中创建一个新的表,并将导入的数据添加到该表中。

6. 对导入的数据进行验证和清洗,以确保数据的准确性和完整性。

7. 执行 SQL 语句,将导入的数据保存到数据库中。

优点该实现方法具有以下优点:1. 高效。

该方法可以大大提高数据导入的速度,节省人力和时间成本。

2. 准确。

该方法可以确保导入的数据准确无误,避免数据错误导致的后续问题。

3. 灵活。

该方法可以支持多种数据库类型,如 MySQL、Oracle 等。

【原创】POI操作Excel导入导出工具类ExcelUtil

【原创】POI操作Excel导入导出工具类ExcelUtil

【原创】POI操作Excel导⼊导出⼯具类ExcelUtil关于本类线程安全性的解释:多数⼯具⽅法不涉及共享变量问题,⾄于添加合并单元格⽅法addMergeArea,使⽤ThreadLocal变量存储合并数据,ThreadLocal内部借⽤Thread.ThreadLocalMap以当前ThreadLocal为key进⾏存储,设置⼀次变量,则其他线程也会有上次数据的残留,因此在addMergeArea⽅法中进⾏清空的操作。

为了保证原⼦性, 采⽤ReentrantLock确保⼀次只有⼀个线程可以进⾏添加合并数据的操作。

线程安全性从以上两个⽅⾯保证。

⽔平有限,难免会有疏漏,敬请谅解。

主要使⽤Apache POI进⾏Excel的导⼊、导出使⽤读取Excel中的数据原始数据如下:⽅法:public static List<List<String>> readFile(InputStream ins, int headRowNum) throws Exception使⽤⽅式:String filePath = "excel⽂件路径";File file = new File(filePath);InputStream ins = new FileInputStream(file);List<List<String>> lists = ExcelUtil.readFile(ins, 2);System.out.println(lists);返回结果:[[序号, 部门, 姓名, 上岗证号, 岗职, ⼊职时间], [, , , , , ], [1, 财务部, 赵六, 001, 出纳, 1540915200000], [1, 财务部, 张三, 002, 会计, 1517328000000]]注:对于Date类型,读取时读的是long类型参数将Excel中的数据转换为对应的实体Entitypublic static <T> List<T> getListFromExcel(InputStream ins, int headRowNum, Class<T> cls, int parseIndex, String... excludeAttr) throws Exceptionpublic static <T> List<T> getListFromExcel(MultipartFile file, int headRowNum, Class<T> cls, int parseIndex, String... excludeAttr) throws Exception两种⽅法本质上没有什么区别,可变参数excludeAttr配置实体不匹配的属性,例如:id注:转换的时候,需要保证excel中属性的顺序与实体中属性的顺序对应,例如excel中部门-姓名-上岗证号...这样,则实体也应该按照这样的顺序定义属性。

excel的大数据量用POI读取

excel的大数据量用POI读取

excel的大数据量用POI读取
昨天刚解决了POI的大数据量写,今天又碰到一个问题,客户把50万的数据用excel传了过来T.T
普通的读取依然会OOM
无奈继续查资料。

记得看到一篇文章上说XSSF默认用DOM解析XML的,那必然会OOM了,于是开始找用SAX读的例子,找到了应该比较经典的FromHowTo.java(/repos/asf/poi/trunk/src/examples/src/org/apa che/poi/xssf/eventusermodel/examples/FromHowTo.java)
用这个例子还是碰到了挺多问题
1. 写入的逻辑会嵌入到这个读取里..它并没有提供比较友好的getRow之类的一行一行处理的方法..导致我的代码写地很猥琐..
2. SharedStringsTable sst = r.getSharedStringsTable();这段代码依然会抛OOM. 看提问频道有一个哥们也碰到了同样的问题..都已经用SAX解析了还是OOM是挺尴尬的..目前的解决方法是开大了一些内存..- -..简单有效..基本上代码跑过了这行以后的读取就不怕OOM了..。

Excel表格导入数据库步骤说明

Excel表格导入数据库步骤说明
1.右键所要导入数据的“表”,点击“导入向导”
2.选择excel作为导入数据格式,并浏览选择对应想导入的excel表格和要导入的对应的分表,操作完成后点击下一步。

3.栏位名称为数据库字段名,根据具体表格而定,第一个数据行为数据库表格中第一行有效数据对应的excel行号,最后一个数据行可以不设定,如果设定,则为最后一个有效数据对应的行号。

4.在第4/8步时点击下一步旁边的“>>”按钮后再点击上一步来到第7/8步,选择一个导入模式,如果进入5/8,6/8界面中进行修改,会影响数据库结构。

5.点击开始,根据提示信息判断是否导入成功,处理项目是否缺失等,成功后点击关闭完成导入。

导入成功后,开始按钮仍然可以点击,再次点击会导致重复导入,会有信息重复的提示信息。

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",否则你找到世界末⽇也不会找到哪⾥有问题(本⼈因为这个折腾了⼀天多时间)。

如何实现Excel表格自动导入到数据库

如何实现Excel表格自动导入到数据库如何实现Excel表格自动导入到数据库2010-05-03 23:46目前人们在存储统计数据时大多都会采用Office的Excel,因为Excel做的表格确实很好用,又简单又方便。

而Excel软件本身的功能也很强大,除了本身自带的一些对表格数据的处理功能外还允许我们自己编写脚本程序,实现自定义的功能。

但是随着信息化建设步伐的加快,网络化办公环境对数据处理的新方式势必要取代一个个Excel文件和层层嵌套的文件夹的传统方式。

而在信息化建设的过程中对已有数据的保存和利用是非常重要的,如何将现有的各种数据存储方式中的数据录入到数据库中,从而为信息化平台服务呢?我们不可能让用户一条条地向数据库里录入数据,因为这很不现实,所以我们要通过程序实现批量录入,或者是直接导入。

我是利用了JXL接口实现了Excel文件导入这个功能,它可以自动把Excel文件中的数据导入到数据库中相应的表里。

而且我把它做成了公共接口,通过配置文件的配置就可以"一次编写,多处运用"。

1.首先需要有jxl的jar包,这个可以在网上下到,解压后把jxl.jar、jxl-2.6.jar、classes12.jar放到工程里。

2.编写类文件,因为Excel表格数据的导入是分三步,首先将Excel文件上传到服务器中,然后将数据读取导入至数据库,最后再将Excel文件删掉。

所以要写两个类,一个实现上传,一个实现读取数据。

上传部分请看我的另一篇关于上传的日志,此处我只介绍读取数据的类,名字为ExcelInAction.java。

内容如下:package com.xdsc.util;import java.io.*;import java.sql.Connection;importjava.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;importcom.xdsc.util.UploadAction;import jxl.*;public class ExcelInAction extends ActionSupport{//static String createTableSql="";//创建数据库的sql static String colType="varchar";//字段类型static String key="id";//主键static String charSet="utf8";//表格字符类型static String ENGINE="InnoDB";//表格类型static String tableName;//表名称static String tableValue;//表属性static String colName="col";//默认字段名static Connection conn=null;/*Excel表格导入数据库需要先将Excel文件上传*/private File file;//封装上传文件private String fileContentType;//封装上传文件类型private String fileFileName;//封装上传文件名private String savePath;//封装上传文件保存路径private String path;//自定义上传文件路径值public String execute()throws Exception{try{UploadAction ua=new UploadAction();//创建上传Action的对象/*配置UploadAction的各项参数*/ua.setPath(path);ua.setFile(file);ua.setFileContentType(fileContentType);ua.setFileFileName(fileFileName);ua.setSavePath(getSavePath());ua.execute();//构建Workbook对象,只读Workbook对象//直接从本地文件创建Workbook//从输入流创建Workbook System.out.println("start loadfile---");InputStream is=newFileInputStream(ua.getSavePath()+"\"+ua.getFileFileName());//创建输入流Workbook rwb=Workbook.getWorkbook(is);Sheet rs=rwb.getSheet(0);//读取第一个sheet int colNum=rs.getColumns();//列数introwNum=rs.getRows();//行数System.out.println("colNum rowNum--"+rowNum+"行,"+colNum+"列+");System.out.println("start create base---");getConntion();//建立数据库连接String sql=getColName(rowNum,colNum);PreparedStatement ps=null;String strValue="";ps=conn.prepareStatement(sql);System.out.println(sql);for(int i=1;i rowNum;i++){strValue="";for(int j=0;j colNum;j++){Cell c=rs.getCell(j,i);strValue=c.getContents();ps.setString(j+1,strValue);}ps.addBatch();}ps.executeBatch();//mit();if(ps!=null){ps.close();}System.out.println("insert end---");close();}catch(Exception e){e.printStackTrace();}return SUCCESS;}static String getColName(int rowNum,int colNum){//可以做成可配置文件String colSql="";String colValue="";for(int j=0;j colNum;j++){colSql=colSql+"'"+colName+j+"',";colValue=colValue+""+"?,";}return"insertinto"+tableName+"("+tableValue+")"+"values("+colValue.substring(0,col stIndexOf(","))+");";}static void getConntion(){try{String driver_class="com.mysql.jdbc.Driver";String connection_url="jdbc:mysql://localhost:3306/software_infoplatform?useUnicode=true&characterEncoding=utf-8";String user_name="root";String db_password="xdsc";Class.forName(driver_class);conn=DriverManager.getConnection(connection_url,user_name,db_password );}catch(Exception e){e.printStackTrace();}}static void close(){if(conn!=null){try{conn.close();}catch(SQLException e){//TODO Auto-generated catch block e.printStackTrace();}}}/*各变量相应的get,set方法*/public File getFile(){return file;}public void setFile(File file){this.file=file;}public String getFileContentType(){return fileContentType;}public void setFileContentType(StringfileContentType){this.fileContentType=fileContentType;}public String getFileFileName(){return fileFileName;}public void setFileFileName(StringfileFileName){this.fileFileName=fileFileName;}public String getSavePath(){HttpServletRequestrequest=ServletActionContext.getRequest();returnrequest.getRealPath(savePath);}public void setSavePath(String savePath){this.savePath=savePath;}public String getPath(){return path;}public void setPath(String path){this.path=path;}public void setTableName(StringtableName){this.tableName=tableName;}public void setTableValue(StringtableValue){this.tableValue=tableValue;}}3.在struts配置文件中做配置:actionname="excelIn"class="com.xdsc.util.ExcelInAction"!-path指定的是上传文件的地址paramname="path"/WEB-INF/classes/upfile/param paramname="tableName"tab_course/paramparamname="tableValue"f_CourseNumber,f_CourseName,f_CourseScore,f_CourseXueShi/param resultname="success"/ExcelInSuccess.jsp/resultresultname="fail"/registerFail.jsp/result/action 4.编写jsp功能页面:%@page language="java"import="java.util.*"pageEncoding="UTF-8"%%String path=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%html head base href="%=basePath%"title Excel表格内容导入数据库测试页面/title/head body formaction="excelIn.action"enctype="multipart/form-data"method="post"请按如下格式排版excel的列字段(以表1:tab_course课程表为例):br br课程编号|课程名|学分|学时br br导入excel文件:br inputtype="file"name="file"/br input type="submit"value="导入"/br/form/body/html然后就可以用了。

如何把excel导入数据库的方法

如何把excel导入数据库的方法
在Excel中录入好数据以后经常需要把数据导入到数据库里进行管理,或许有的朋友不知道该如何把Excel导入到数据库里头。

下面是由店铺分享的如何把excel导入数据库的方法,以供大家阅读和学习。

如何把excel导入数据库的方法:
Excel导入数据库步骤1:首先打开SQL SERVER 的企业管理器,到你要导入数据的数据库的表上右键,选择所有任务,导入数据。

在弹出的对话框上点击下一步。

Excel导入数据库步骤2:选择数据源为EXCEL如图所示。

Excel导入数据库步骤3:选择要导入的EXCEL文件
Excel导入数据库步骤4:输入你的数据库的登入信息
Excel导入数据库步骤5:选择第一个项目(从源数据库复制表和视图),然后点下一步
Excel导入数据库步骤6:选择你要导入的表的第几页,其中目的表是可以修改的,如果要转换其中的数据,点后面的小方块,上面有三个小点的小方块。

Excel导入数据库步骤7:点击下一步,完成,即可
Excel导入数据库步骤8:数据导入很快的,导入的结果会反馈给你。

点击完成。

Excel导入数据库步骤9:刷新你的数据库,这个时候你可以发现你导入的数据表已经存在并可以使用了。

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

目录一、总体设计思路........................................................................................................ - 1 -二、导入规则表设计.................................................................................................... - 1 -1、数据导入表规则.................................................................................................... - 1 -2、数据导入列规则.................................................................................................... - 2 -三、导入规则类设计.................................................................................................... - 3 -四、界面设计................................................................................................................ - 4 -1、规则配置界面........................................................................................................ - 4 -2、导入数据界面........................................................................................................ - 6 -五、导入逻辑................................................................................................................ - 7 -六、内部评审补充........................................................................................................ - 8 -此文档仅为设计方案,如要查看具体实现,请联系我所要源码通用Excel导入设计方案一、总体设计思路考虑到Excel导入在项目中应用较多,随后其他项目中都会用到,为了减少重复工作,不必因为excel的样式、数据等变化而重新编码,重复劳动,因此必须抽取通用的东西出来,封装共同点,暴露个性点,使用时只需要关注相关业务,而不必关注excel的读取和存储。

考虑到这个情况,可以使用规则配置来解决这个问题。

配置规则的时候,需要配置excel要导入的表,字段等信息,导入的时候依据这个规则将数据导入到数据库中。

这样一来,在进行excel导入时候只需要为某种数据配置一个规则,然后调用封装的导入类就可以完成整个excel导入的工作了。

实现源码参见/detail/whatismvc/3696185二、导入规则表设计1、数据导入表规则(1)ID:数据表唯一标识,没有业务含义;(2)Create_time:创建时间;(3)Rule_name:规则名称;(4)End_row:数据读取结束标识,blank_row标识遇到空行结束,数字N表示读取到第N行结束;(5)Header_index:excel标题行索引,默认值为1,表示第一行是标题行;(6)Data_index:数据开始行索引,默认值为2,表示第2行开始是正式数据;(7)Table_name:表名称,表示这个规则是针对这个表的数据导入定义的;(8)Delete_repeat:是否删除重复行,即是否导入重复数据,0则不删除,直接导入,1则先删除重复数据,然后再导入;是否重复根据规则表data_import_column_rule的Is_unique字段来判定,重复行是指数据库中存在与excel中相同的数据;(9)Enable:有效标识;2、数据导入列规则(1)ID:数据表唯一标识,没有业务含义;(2)Table_rule_id:data_import_table_rule表的主键,表示这条列规则是属于哪个表的规则;(3)Is_PK:是否是主键;(4)Produce_method:数据生成策略,导入数据/自定义策略/默认值,三种策略供选择;(5)Is_unique:是否唯一,用来判定重复数据;(6)Column_name:列名称,对应表中的列名;(7)Header_name:excel列标题,与数据表列是对应的;(8)Required:是否必须导入,0不必须1必须;(9)Data_type:数据类型,数字还是字符,number/string/date;(10)Max_length:最大允许长度,不能大于,数据表中该列的长度;(11)Produce_method_value:数据生成策略值,导入数据是为空,自定义策略是为策略方法名,或者是默认值;(12)Comment:备注;(13)Is_dictionary:最终导入数据是否来源于字典,0不1是;(14)Dic_table_name:字典数据来源表的名称;(15)Dic_type_column:字典类型列的字段名;(16)Dic_type_value:该列所属的字典类型值;(17)Dic_required_column:字典表最终获取值列的名称,例如:现在需要导入“编码器类型”,excel内容是“飞利浦”,“编码器类型”是一个字典,对应的字典表是“video_coding_type”,“飞利浦”是“video_coding_type_name”列的值,而数据表需要存入的是“video_coding_type_id”列的值,这时“video_coding_type_id”就是Dic_required_column,而“video_coding_type_name”就是Dic_reference_column,“video_coding_type”是Dic_table_name;(18)Dic_reference_column:参见第17条说明。

(19)Enable:该规则是否有效;三、导入规则类设计class ImportResult {private int success;//成功数目private int failed;//失败数目}class Excel {private DataImportTableRule tableRule;public Excel(String path){…}public ImportResult import(){…}}class DataImportTableRule {private String id;private Date createTime;private String ruleName;private String endRow;private int headerIndex;private int dataIndex;private String tableName;private boolean deleteRepeat;private String exceptColumns;private Set ColumnRules;public void initColumnRules(){…}public void addColumnRule(DataImportColumnRule columnRule){…} }class DataImportColumnRule {private String id;private String tableRuleId;private boolean isUnique;private String columnName;private String headerName;private boolean required;private String dataType;private String maxLength;private String defaultValue;private String comment;private boolean isDictionary;private String dicTableName;private String dicTypeColumn;private String dicTypeValue;private String dicRequiredColumn;private String dicReferenceColumn;}四、界面设计1、规则配置界面2、导入数据界面五、导入逻辑关于Excel操作,设计将采用apache的poi组件,版本采用项目lib中已经包含的版本poi-2.5.1。

具体导入逻辑如下:1、将excel文件上传到web服务器,利用poi加载excel文件。

2、根据用户选择的导入规则,从数据库加载对应的DataImportTableRule对象;3、根据标题行索引Header_index,数据开始行索引Data_index,结束行标识End_row,判断该excel是否满足对应规则的导入条件,满足则继续,不满足则给出提示信息。

4、从数据开始行Data_index开始,逐行读取excel文件。

5、处理excel第一列,根据excel第一列的标题以及header_name属性,匹配到对应的DataImportColumnRule对象,如果没有匹配的对象,则抛出异常(未找到与之匹配的列规则),如果该列已经处理过,也抛出异常(excel标题存在重复列),否则继续;6、读取Excel当前列的内容text,如果text是空值,判断Required属性是否为true,如果是false,则将defaultValue属性作为excel内容text直接执行第11条,如果是true则继续;7、判断Is_dictionary属性是否为true,如果为false,则跳过8、9逻辑,直接执行第10条,如果为true,则继续;8、判断Dic_table_name属性、Dic_type属性、Dic_required_column属性以及Dic_reference_column属性,若其中有任意一个为null或空值,则抛出异常(属于字典,却未指定字典表名称Dic_table_name以及相关属性Dic_type、Dic_required_column、Dic_reference_column),否则继续;9、查找字典表,查找语句为”select [Dic_required_column] from [Dic_table_name]where [Dic_type_column]=[Dic_type_value] and [Dic_Reference_column]=’[text]’”,若sql语句不能查询到数据,则抛出异常(找不到对应的字典项),若查询到数据,则取第一条数据的[Dic_required_column]值,继续;10、判断Is_unique属性是否为true,若为false,执行第11条,若为true,则查找表[Table_name]中[Column_name]值为[text]的数据是否存在,若不存在则执行第11条,否则继续判断Delete_repeat属性是否为true,若为true则删除数据库中该条数据;11、判断Data_type属性,并判断text与该类型是否匹配,若不匹配,则抛出异常(数据类型不符合条件),如果匹配则继续;12、判断text长度是否超过Max_length属性值,若超过,则抛出异常(单元格内容长度太大),否则继续;13、将text作为Column_name列的值,加到准备好的sql语句对应参数位置,等待执行;14、处理excel第二列,从第5条开始执行循环处理,直到Excel列结束;15、执行或批量执行准备好的sql语句,返回执行结果;16、处理excel第二行,并判断是否符合End_row的条件,如果是结束行,则整个导入结束,否则从第4条开始执行循环处理,直到End_row结束。

相关文档
最新文档