数据导入方法、装置及服务器
技术领域
本发明涉及数据库技术领域,尤其是涉及一种数据导入方法、装置及服务器。
背景技术
Jxl是一个开源的Java Excel API项目,可以通过Jxl很方便地操作Excel文档。然而使用Jxl在解析小的excel文件时比较有优势,在解析大文件时效率不高,同时Jxl仅支持比较低版本的excel,比如Excel 95、97、2000、2003。在将excel文件中的数据导入到数据库的过程中,存在数据量比较大的情况,此时逐条数据保存到数据库需要频繁进行数据库连接,加大了数据库的连接开销,并且保存数据的效率也不高。
针对上述解析和存入数据库的处理效率不高的问题,目前尚未提出有效解决方案。
发明内容
有鉴于此,本发明的目的在于提供一种数据导入方法、装置及服务器,可以支持更多excel版本,提高大型excel文件中的数据进行解析并存入数据库中的处理效率。
第一方面,本发明实施例提供了一种数据导入方法,包括:使用Apache POI技术,解析excel文件得到欲导入Mysql数据库的数据;获取数据的导入方式,导入方式包括:直接导入和处理后导入;当数据的导入方式为直接导入,通过批处理直接将数据导入Mysql数据库中;当数据的导入方式为处理后导入,根据数据对应的业务需要进行数据处理,并将处理后的数据导入Mysql数据库中。
结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,获取数据的导入方式包括:接收用户的业务指示;业务指示包括数据存在业务约束和数据不存在业务约束;业务约束包括唯一性约束或与其他数据之间的业务约束;当不存在业务约束时,确定数据的导入方式为直接导入;当存在业务约束时,确定数据的导入方式为处理后导入。
结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,通过批处理直接将数据导入Mysql数据库中包括:使用JDBC批处理技术将数据批量保存到Mysql数据库中。
结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,根据数据对应的业务需要进行数据处理包括:当数据与其他数据之间具有业务约束时,使用JDBC的批量处理将数据保存到临时表中;结合临时表和其他数据的业务表创建存储过程,并进行数据业务处理。
结合第一方面的第三种可能的实施方式,本发明实施例提供了第一方面的第四种可能的实施方式,在进行数据业务处理的步骤之后还包括:通过存储过程将临时表中的数据更新到数据库的正式表中。
结合第一方面或其第三种可能的实施方式,本发明实施例提供了第一方面的第五种可能的实施方式,其中,根据数据对应的业务需要进行数据处理包括:当数据存在唯一性约束时,通过Mysql中的ON DUPLICATE KEY UPDATE语法进行数据处理。
结合第一方面的第五种可能的实施方式,本发明实施例提供了第一方面的第六种可能的实施方式,其中,在进行数据业务处理的步骤之后还包括:当使用了存储过程进行数据处理时,通过存储过程将处理后的数据导入数据库中;当未使用存储过程进行数据处理时,通过批处理将处理后的数据导入数据库中。
第二方面,本发明实施例还提供一种数据导入装置,包括:解析模块,用于使用Apache POI技术,解析excel文件得到欲导入Mysql数据库的数据;导入方式获取模块,用于获取数据的导入方式,导入方式包括:直接导入和处理后导入;直接导入模块,用于当数据的导入方式为直接导入,通过批处理直接将数据导入Mysql数据库中;处理导入模块,用于当数据的导入方式为处理后导入,根据数据对应的业务需要进行数据处理,并将处理后的数据导入Mysql数据库中。
结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,导入方式获取模块还用于:接收用户的业务指示;业务指示包括数据存在业务约束和数据不存在业务约束;业务约束包括唯一性约束或与其他数据之间的业务约束;当不存在业务约束时,确定数据的导入方式为直接导入;当存在业务约束时,确定数据的导入方式为处理后导入。
第二方面,本发明实施例还提供一种服务器,服务器包括处理器,存储器,总线和通信接口,处理器、通信接口和存储器通过总线连接;存储器用于存储程序;处理器,用于通过总线调用存储在存储器中的程序,执行上述第一方面及其各可能实施方式的方法。
本发明实施例带来了以下有益效果:本发明实施例提供的数据导入方法、装置及服务器,基于Mysql数据库,结合Apache POI技术和JDBC批处理技术,可以支持更多excel版本,在导入的excel文件比较大的时候,解析excel文件的效率会有一定的提高,JDBC批量处理技术可以大大减少数据保存到数据库的时间,提高整体处理效率。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据导入方法的流程示意图;
图2为本发明实施例提供的另一种数据导入方法的流程示意图;
图3为本发明实施例提供的另一种数据导入方法的流程示意图;
图4为本发明实施例提供的另一种数据导入方法的流程示意图;
图5为本发明实施例提供的一种数据导入装置的结构示意图;
图6为本发明实施例提供的一种服务器的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
Jxl是通过java操作excel表格的工具类库,可以支持Excel 95-2000的所有版本,支持字体、数字、日期操作,能够修饰单元格属性,支持图像和图表。目前Jxl仅支持比较低版本的excel,且解析excel大文件时效率不高;在数据量比较大的情况,逐条数据保存到数据库的效率低,基于此,本发明实施例提供的一种数据导入方法、装置及服务器,可以支持更多excel版本,提高大型excel文件中的数据进行解析并存入数据库中的处理效率。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种数据导入方法进行详细介绍。
实施例1
本发明实施例提供了一种数据导入方法,参见图1所示的一种数据导入方法的流程示意图,该实施方式示出的方法流程包括如下步骤:
步骤S11,使用Apache POI技术,解析excel文件得到欲导入Mysql数据库的数据。
其中,Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。在本实施例中使用Apache POI技术解析excel文件,并将excel文件中的数据导入到Mysql数据库中。上述excel文件既可以是用户上传到服务器中的文件,也可以是服务器中已预先保存的文件。相比较于Jxl,POI解析excel文件的效率更高,尤其是在解析大型excel文件时,使用POI技术可以提高效率,并且可以兼容后缀名xls和xlsx的excel文件,即支持更多excel版本。具体可以使用HSSF解析后缀名为xls的文件,使用XSSF解析后缀名为xlsx的文件。
步骤S12,获取数据的导入方式。
具体地,上述导入方式包括两种:直接导入和处理后导入。直接导入即excel文件中的数据不需要任何处理直接存入数据库,处理后导入即excel文件中的数据本身具有一些业务需要,只有在进行过相应的业务处理后才能将处理后的数据存入。
可以通过用户的指示获取excel文件中的数据的导入方式,具体包括以下步骤:
(1)接收用户的业务指示。可以在导入数据之前提示用户选择该数据是否具有业务约束,并且确定用户选择的是哪种业务约束,即得到了用户的业务指示。其中,业务指示包括数据存在业务约束和数据不存在业务约束;业务约束包括唯一性约束或与其他数据之间的业务约束。
(2)当不存在业务约束时,确定数据的导入方式为直接导入。可以理解的是在无业务约束时,将excel文件中的数据直接导入即可。
(3)当存在业务约束时,确定数据的导入方式为处理后导入。
步骤S13,当上述数据的导入方式为直接导入,通过批处理直接将数据导入Mysql数据库中。
在直接导入时,可以使用JDBC批处理技术将数据批量保存到Mysql数据库中。其中JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。通过JDBC可以与数据库建立连接、发送操作数据库的语句并处理结果。当需要向数据库发送一批SQL语句执行,应避免向数据库一条条地发送执行,而应采用JDBC的批处理机制,以提升执行效率。
步骤S14,当上述数据的导入方式为处理后导入,根据数据对应的业务需要进行数据处理,并将处理后的数据导入Mysql数据库中。
在处理后导入时,根据该数据的业务约束进行相应的处理,得到处理后的数据后再进行导入。
本发明实施例提供的上述数据导入方法,基于Mysql数据库,结合Apache POI技术和JDBC批处理技术,可以支持更多excel版本,在导入的excel文件比较大的时候,解析excel文件的效率会有一定的提高,JDBC批量处理技术可以大大减少数据保存到数据库的时间,提高整体处理效率。
以下对excel文件的数据具有业务约束的情况进行详细说明。在具有业务约束时,需要根据数据对应的业务需要进行数据处理,上述步骤S14具体包括
(1)当数据与其他数据之间具有业务约束时,首先使用JDBC的批量处理将数据保存到临时表中。其次,结合该临时表和其他数据的业务表创建存储过程,并进行数据业务处理。上述业务表为与当前数据具有业务关系的数据组成的。具体地,创建存储过程结合涉及的业务表和保存的临时表进行数据的业务上的处理。
在完成数据的业务处理后,通过存储过程将临时表中的数据更新到数据库的正式表中。
(2)当数据存在唯一性约束时,通过Mysql中的ON DUPLICATE KEY UPDATE语法进行数据处理。
此操作会根据表的约束条件判断,违反约束条件则进行更新,反之则进行新增,判断记录是否存在,不存在则插入存在则更新。如果在INSERT语句末尾指定了ON DUPLICATEKEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。
由于上述两种约束条件可以单独存在也可以同时存在,因此在进行唯一性约束处理后,需要判断其之前的步骤中是否使用过存储过程进行处理,具体如下:
当使用了存储过程进行数据处理时,通过存储过程将处理后的数据导入数据库中;
当未使用存储过程进行数据处理时,通过批处理将处理后的数据导入数据库中。
本发明实施例提供的上述数据导入方法,基于Mysql数据库,结合Apache POI技术和JDBC批处理技术,并针对数据与其他数据之间具有业务约束使用存储过程处理数据,针对数据具有唯一性约束使用Mysql中的ON DUPLICATE KEY UPDATE语法进行数据处理,可以在数据库中直接进行操作,减少对数据库的连接开销,提高整体处理导入效率。
实施例2
本发明实施例提供了一种数据导入方法,以excel文件中的数据具有与其他数据的业务约束为例,参见图2所示的一种数据导入方法的流程示意图,该实施方式示出的方法流程包括如下步骤:
步骤S21,将包含欲导入的数据的excel文件上传到服务器。
本实施例以需要导入的Mysql数据库在服务器为例进行说明,其也可以保存在其他位置。当Mysql数据库在服务器时,先上传需要导入的excel文件。
步骤S22,使用Apache POI技术,解析该excel文件得到欲导入Mysql数据库的数据。
在解析得到需要导入的数据后,将数据加载到系统的内容中。
步骤S23,根据获取的导入方式判断是否需要根据其他表中的数据进行业务上的处理。如果是,执行步骤S25;如果否,执行步骤S24。
步骤S24,使用jdbc批处理技术将数据批量保存到Mysql数据库中。
步骤S25,使用jdbc的批量处理将数据保存到临时表中。
如果需要查询其他表中的数据进行业务,需要将上述待处理的数据先保存至临时表中,在该临时表中对数据进行处理。
步骤S26,结合临时表和其他数据的业务表创建存储过程,并进行数据业务处理。
步骤S27,通过存储过程将临时表中的数据更新到数据库的正式表中。
由于在上述步骤中使用了存储过程,在进行处理的数据是保存在临时表中的,此时将临时表中的数据更新到正式表中即可。
本发明实施例提供的上述数据导入方法,基于Mysql数据库,结合Apache POI技术和JDBC批处理技术,并针对数据与其他数据之间具有业务约束使用存储过程处理数据,可以在数据库中直接进行操作,减少对数据库的连接开销,提高整体处理导入效率。
实施例3
本发明实施例提供了一种数据导入方法,以excel文件中的数据具有唯一性约束为例,参见图3所示的一种数据导入方法的流程示意图,该实施方式示出的方法流程包括如下步骤:
步骤S31,将包含欲导入的数据的excel文件上传到服务器。
步骤S32,使用Apache POI技术,解析该excel文件得到欲导入Mysql数据库的数据。
步骤S33,根据获取的导入方式判断是否存在唯一性约束。如果是,执行步骤S34;如果否,执行步骤S37。
具体地,需要判断是否需要保证数据的唯一性,避免重复导入。
步骤S34,通过Mysql中的ON DUPLICATE KEY UPDATE语法进行数据处理。
步骤S35,判断是否使用了存储过程进行数据处理。如果是,执行步骤S36;如果否,执行步骤S37。
由于可能进行过与其他表数据的业务处理,其过程中会使用存储过程,在本步骤进行判断,如果使用过则通过存储过程导入。
步骤S36,通过存储过程将处理后的数据导入数据库中。
具体地,将临时表中的数据更新到正式表中即可。
步骤S37,使用jdbc批处理技术将数据批量保存到Mysql数据库中。
本发明实施例提供的上述数据导入方法,基于Mysql数据库,结合Apache POI技术和JDBC批处理技术,针对数据具有唯一性约束使用Mysql中的ON DUPLICATE KEY UPDATE语法进行数据处理,可以在数据库中直接进行操作,减少对数据库的连接开销,提高整体处理导入效率。
实施例4
本发明实施例提供了一种数据导入方法,参见图4所示的一种数据导入方法的流程示意图,该实施方式示出的方法流程包括如下步骤:
步骤S41,将包含欲导入的数据的excel文件上传到服务器。
步骤S42,使用Apache POI技术,解析该excel文件得到欲导入Mysql数据库的数据。
步骤S43,判断上述数据的导入方式是否为直接导入。如果是,执行步骤S51;如果否,执行步骤S44。
步骤S44,判断是否需要根据其他表中的数据进行业务上的处理。如果是,执行步骤S45;如果否,执行步骤S47。
步骤S45,使用jdbc的批量处理将数据保存到临时表中。
步骤S46,结合临时表和其他数据的业务表创建存储过程,并进行数据业务处理。
步骤S47,判断是否存在唯一性约束。如果是,执行步骤S48;如果否,执行步骤S49。
步骤S48,通过Mysql中的ON DUPLICATE KEY UPDATE语法进行数据处理。
步骤S49,判断是否使用了存储过程进行数据处理。如果是,执行步骤S50;如果否,执行步骤S51。
步骤S50,通过存储过程将处理后的数据导入数据库中。
步骤S51,使用jdbc批处理技术将数据批量保存到Mysql数据库中。
本发明实施例提供的数据导入方法,与上述实施例提供的数据导入方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。
实施例5
本发明实施例提供一种数据导入装置,参见图5所示的数据导入装置的结构示意图,该数据导入装置包括解析模块501、导入方式获取模块502、直接导入模块503和处理导入模块504,上述各模块的功能如下:
解析模块501,用于使用Apache POI技术,解析excel文件得到欲导入Mysql数据库的数据;
导入方式获取模块502,用于获取数据的导入方式,导入方式包括:直接导入和处理后导入;
直接导入模块503,用于当数据的导入方式为直接导入,通过批处理直接将数据导入Mysql数据库中;
处理导入模块504,用于当数据的导入方式为处理后导入,根据数据对应的业务需要进行数据处理,并将处理后的数据导入Mysql数据库中。
进一步,上述导入方式获取模块还用于:接收用户的业务指示;业务指示包括数据存在业务约束和数据不存在业务约束;业务约束包括唯一性约束或与其他数据之间的业务约束;当不存在业务约束时,确定数据的导入方式为直接导入;当存在业务约束时,确定数据的导入方式为处理后导入。
本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
实施例6
本发明实施例提供了一种服务器,包括处理器,存储器,总线和通信接口,处理器、通信接口和存储器通过总线连接;存储器用于存储程序;处理器,用于通过总线调用存储在存储器中的程序,执行上述实施例1的方法。
图6为本发明实施例提供的一种服务器的结构示意图,包括:处理器60,存储器61,总线62和通信接口63,处理器60、通信接口63和存储器61通过总线62连接;处理器60用于执行存储器61中存储的可执行模块,例如计算机程序。
其中,存储器61可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口63(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
总线62可以是ISA总线、PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
其中,存储器61用于存储程序,处理器60在接收到执行指令后,执行程序,前述本发明实施例任一实施例揭示的流过程定义的装置所执行的方法可以应用于处理器60中,或者由处理器60实现。
处理器60可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器60中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器60可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器61,处理器60读取存储器61中的信息,结合其硬件完成上述方法的步骤。
本发明实施例所提供的数据导入方法、装置及服务器的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
上述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例的方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。