将excel文档导入数据库的方法及装置
文献发布时间:2023-06-19 19:33:46
技术领域
本发明涉及大数据导入技术领域,尤其涉及一种将excel文档导入数据库的方法及装置。
背景技术
在实际应用中,经常遇到需要将一个大容量数据的Excel文档导入到数据库中。例如,需要将学生信息或原文的译文信息导入到myql数据库中进行保存。
现有技术中,大容量数据的excel表格导入到myql数据库里都是采用pc端第三方软件工具Navicat进行的。但此种方法需要数据库的账号密码,不安全。而且直接将excel表格导入到myql数据库中容易产生脏数据。
发明内容
本发明提供一种将excel文档导入数据库的方法及装置,用以解决现有技术中大容量数据的Excel文档导入数据库不安全,且容易产生脏数据的缺陷,实现提高Excel文档导入的安全性和准确性。
本发明提供一种将excel文档导入数据库的方法,包括:
接收客户端发送的待导入excel文档的分片,并将所述分片写入临时表中;
在将所述待导入excel文档的所有分片写入所述临时表后,将所述临时表和所述待导入excel文档待导入的数据库表进行对比,确定所述临时表中每行的导入操作类别;
根据所述临时表中每行的导入操作类别,将所述临时表中每行的字段值导入所述数据库表中。
根据本发明提供的一种将excel文档导入数据库的方法,所述导入操作类别包括待插入行和待更新行;
相应地,所述将所述临时表和所述待导入excel文档待导入的数据库表进行对比,确定所述临时表中每行的导入操作类别,包括:
若所述数据库表中存在与所述临时表的任一行中的全部字段值相同的行,则将所述任一行从所述临时表中删除;
若所述数据库表中存在与所述临时表的任一行中部分字段值相同的行,则确定所述任一行的导入操作类别为所述待更新行;
若所述数据库表中不存在与所述临时表的任一行中的至少一个字段值相同的行,则确定所述任一行的导入操作类别为待插入行。
根据本发明提供的一种将excel文档导入数据库的方法,所述根据所述临时表中每行的导入操作类别,将所述临时表中每行的字段值导入所述数据库表中,包括:
将所述临时表中的待插入行插入所述数据库表,使用所述临时表中的待更新行对所述数据库表中待更新行对应的行进行更新。
根据本发明提供的一种将excel文档导入数据库的方法,所述将所述临时表中的待插入行插入所述数据库表,使用所述临时表中的待更新行对所述数据库表中待更新行对应的行进行更新,包括:
在所述临时表中增加行导入操作类别字段;
若所述临时表中的任一行为待插入行,则将所述任一行的行导入操作类别字段的值设置为第一预设值;
若所述临时表中的任一行为待更新行,则将所述任一行的行导入操作类别字段的值设置为第二预设值;
使用第一数据库命令查询所述临时表中行导入操作类别字段为第一预设值的行,将查询出的第一预设阈值对应行中除第一预设阈值以外的其他字段值插入所述数据库表;
使用第二数据库命令查询所述临时表中行导入操作类别字段为第二预设值的行,使用查询出的第二预设值对应行中除第二预设值以外的其他字段值对所述数据库表中待更新行对应的行进行更新。
根据本发明提供的一种将excel文档导入数据库的方法,所述接收客户端发送的待导入excel文档的分片,包括:
接收所述客户端按照预设分片大小或预设数据条数对所述待导入excel文档划分的分片。
根据本发明提供的一种将excel文档导入数据库的方法,所述分片在所述客户端上传失败且重新上传的次数小于第一预设阈值的情况下,由所述客户端再次上传;
所述分片在所述客户端上传过程中若用户进行暂停操作,则暂停对所述分片的上传;若所述用户在所述暂停操作后进行启动操作,则继续对所述分片进行上传;
所述分片在所述待导入excel文档的数据大小大于第二预设阈值的情况下,并行上传。
本发明还提供一种将excel文档导入数据库的装置,包括:
接收模块,用于接收客户端发送的待导入excel文档的分片,并将所述分片写入临时表中;
对比模块,用于在将所述待导入excel文档的所有分片写入所述临时表后,将所述临时表和所述待导入excel文档待导入的数据库表进行对比,确定所述临时表中每行的导入操作类别;
导入模块,用于根据所述临时表中每行的导入操作类别,将所述临时表中每行的字段值导入所述数据库表中。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述将excel文档导入数据库的方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述将excel文档导入数据库的方法的步骤。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述将excel文档导入数据库的方法的步骤。
本发明提供的将excel文档导入数据库的方法及装置,通过利用客户端的处理能力对待导入excel文档分片后上传到服务端,提高了上传效率和上传成功率;然后由服务端将分片写入临时表,通过将临时表和待导入excel文档待导入的数据库表进行对比,确定对临时表中每行的导入操作,从而避免导入脏数据,且不需要密码,提高数据导入的安全性和准确性,同时提高导入数据的速度和质量。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的将excel文档导入数据库的方法的流程示意图;
图2是本发明提供的将excel文档导入数据库的装置的结构示意图;
图3是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1描述本发明的一种将excel文档导入数据库的方法,包括:步骤101,接收客户端发送的待导入excel文档的分片,并将所述分片写入临时表中;
本实施例的执行主体为服务端,可选地服务端使用php语言。
在待导入excel文档为大容量数据文档的情况下,由于Excel文档的数据量大、网络波动、中途断网、链接超时等原因,容易导致Excel文档中的数据上传失败,从而导入数据库失败。
本实施例中通过客户端将大数据量的待导入excel文档分割成若干个小数据量的分片,将待导入excel文档以分片形式上传到服务端。
可选地,在客户端浏览器的web页面上设置一个按钮,并绑定webupload组件。用户通过点击按钮的方式启用分片处理大文件上传,在上传时调用webupload组件对分片进行上传。可以在web页面上配置每个分片的大小和其他参数。
可选地,临时表为mysql数据库新建的临时表target_tmp_table。临时表中的字段与待导入excel文档待导入的mysql数据库表中的字段对应相同。本实施例对数据库的类型不作限定。
服务端在接收到待导入excel文档的分片后,可采用分片的MD5值对分片重命名,然后保存到临时文件夹中。
使用mysql命令load data infile读取临时文件夹里的分片,将分片写入到临时表target_tmp_table中。
接收分片,并将分片保存到临时文件夹的步骤与从临时文件夹里读取分片写入到临时表的步骤并发执行,直到待导入excel文档的所有分片全部上传,并全部写入到临时表target_tmp_table中。
步骤102,在将所述待导入excel文档的所有分片写入所述临时表后,将所述临时表和所述待导入excel文档待导入的数据库表进行对比,确定所述临时表中每行的导入操作类别;
可选地,客户端按照每个分片位于待导入excel文档中的先后位置,依次将各分片发送给服务端,同时将分片的总数量发送服务端。服务端统计临时表中分片的数量,判断临时表中分片的数量与分片的总数量是否相同,从而确定是否将所有分片写入临时表。
在将所有分片写入临时表后,将临时表target_tmp_table中数据和待导入excel文档待导入的数据库表target_table中的数据以行和字段为单位进行对比,根据对比结果确定对每行的导入操作类别。本实施例对导入操作类别不作具体限定。
步骤103,根据所述临时表中每行的导入操作类别,将所述临时表中每行的字段值导入所述数据库表中。
根据每行的导入操作类别,对临时表中的每行进行相应的导入操作。
本实施例通过利用客户端的处理能力对待导入excel文档分片后上传到服务端,提高了上传效率和上传成功率;然后由服务端将分片写入临时表,通过将临时表和待导入excel文档待导入的数据库表进行对比,确定对临时表中每行的导入操作,从而避免导入脏数据,且不需要密码,提高数据导入的安全性和准确性,同时提高导入数据的速度和质量。
在上述实施例的基础上,本实施例中所述导入操作类别包括待插入行和待更新行;
相应地,所述将所述临时表和所述待导入excel文档待导入的数据库表进行对比,确定所述临时表中每行的导入操作类别,包括:若所述数据库表中存在与所述临时表的任一行中的全部字段值相同的行,则将所述任一行从所述临时表中删除;
对比临时表target_tmp_table和待导入数据库表target_table中的每行数据。
如果两个表之间存在完全相同的行,即行中全部字段的值均对应相同,则说明临时表中的该行数据在待导入数据库表中已经存在,该客户端或其他客户端已经导入过该行数据,该行数据为重复行,从临时表中删除该行数据,不将该行数据导入待导入数据库表中
若所述数据库表中存在与所述临时表的任一行中部分字段值相同的行,则确定所述任一行的导入操作类别为所述待更新行;
对于临时表target_tmp_table和待导入数据库表target_table之间不完全相同的行,继续判断行中的部分字段的值是否对应相同。部分字段的个数大于0小于字段的总个数。
需要说明的是,两个表中对应相同的部分字段在某些应用场景下需要限定为关键字段,包括待导入数据库表中的主键和/或外键。
如果两个表之间存在不完全相同的行,即行中的部分字段值对应相同,则说明临时表中的该行数据是待导入数据库表中的更新数据。使用临时表中的该行数据更新待导入数据库表中与该行数据部分字段对应相同的行。
若所述数据库表中不存在与所述临时表的任一行中的至少一个字段值相同的行,则确定所述任一行的导入操作类别为待插入行。
将临时表中除了待插入行和待更新行以外的其他行作为待插入行,将待插入行作为待导入数据库表的新增数据行插入待导入数据库表中。
在上述实施例的基础上,本实施例中所述根据所述临时表中每行的导入操作类别,将所述临时表中每行的字段值导入所述数据库表中,包括:将所述临时表中的待插入行插入所述数据库表,使用所述临时表中的待更新行对所述数据库表中待更新行对应的行进行更新。
将待插入行作为待导入数据库表的新增数据行插入待导入数据库表中。
使用临时表中的待更新行更新待导入数据库表中与该待更新行的部分字段对应相同的行。
在上述实施例的基础上,本实施例中所述将所述临时表中的待插入行插入所述数据库表,使用所述临时表中的待更新行对所述数据库表中待更新行对应的行进行更新,包括:在所述临时表中增加行导入操作类别字段;
在临时表target_tmp_table中另外增加一个导入操作类别字段type。
若所述临时表中的任一行为待插入行,则将所述任一行的行导入操作类别字段的值设置为第一预设值;
如果临时表中的某行通过对比得出该行为待插入行,则将待插入行的type字段值设置为第一预设值,如10,表示该行为待插入行。
可选地,每行的导入操作类别字段的默认值设为第一预设值,如10。
若所述临时表中的任一行为待更新行,则将所述任一行的行导入操作类别字段的值设置为第二预设值;
如果临时表中的某行通过对比得出该行数据为待更新行,则将待更新行的type字段值设置为第二预设值,如20,表示行数据为待更新行。
使用第一数据库命令查询所述临时表中行导入操作类别字段为第一预设值的行,将查询出的第一预设阈值对应行中除第一预设阈值以外的其他字段值插入所述数据库表;
使用mysql命令查询到临时表target_tmp_table中所有type字段值等于10的行,将这些行中除type字段以外的数据插入数据库表target_table中。
使用第二数据库命令查询所述临时表中行导入操作类别字段为第二预设值的行,使用查询出的第二预设值对应行中除第二预设值以外的其他字段值对所述数据库表中待更新行对应的行进行更新。
使用mysql命令查询到临时表target_tmp_table中所有type字段值等于20的行,将这些行中除type字段以外的数据更新到数据库表target_table中。
在上述各实施例的基础上,本实施例中所述接收客户端发送的待导入excel文档的分片,包括:接收所述客户端按照预设分片大小或预设数据条数对所述待导入excel文档划分的分片。
本申请中的客户端可以根据预设分片大小,如10M将excel文档划分成大小相同的分片,还可以根据预设数据条数将excel文档划分成数据条数相同的分片。
在上述各实施例的基础上,本实施例中所述分片在所述客户端上传失败且重新上传的次数小于第一预设阈值的情况下,由所述客户端再次上传;
在网络环境不好的情况下,当出现某个分片上传失败,则对上传失败的分片单独进行重传,而不需要重新上传其他分片。本实施例对重传次数进行限定,如5次。
所述分片在所述客户端上传过程中若用户进行暂停操作,则暂停对所述分片的上传;若所述用户在所述暂停操作后进行启动操作,则继续对所述分片进行上传;
在分片上传过程中,如果用户中途暂停上传,则在用户重新启动上传后,从暂停上传的分片开始继续上传,不用对前面已经上传的分片进行上传。
所述分片在所述待导入excel文档的数据大小大于第二预设阈值的情况下,并行上传。
如果待导入excel文档的数据大小较大,则可以使用多线程并行上传处理多个分片进行导入,提高导入效率,降低导入延时。本实施例还适用于流式上传,即在需要导入的数据量大但还不确定的情况下进行导入。
下面对本发明提供的将excel文档导入数据库的装置进行描述,下文描述的将excel文档导入数据库的装置与上文描述的将excel文档导入数据库的方法可相互对应参照。
如图2所示,该装置包括接收模块201、对比模块202和导入模块203,其中:
接收模块201用于接收客户端发送的待导入excel文档的分片,并将所述分片写入临时表中;
对比模块202用于在将所述待导入excel文档的所有分片写入所述临时表后,将所述临时表和所述待导入excel文档待导入的数据库表进行对比,确定所述临时表中每行的导入操作类别;
导入模块203用于根据所述临时表中每行的导入操作类别,将所述临时表中每行的字段值导入所述数据库表中。
本实施例通过利用客户端的处理能力对待导入excel文档分片后上传到服务端,提高了上传效率和上传成功率;然后由服务端将分片写入临时表,通过将临时表和待导入excel文档待导入的数据库表进行对比,确定对临时表中每行的导入操作,从而避免导入脏数据,且不需要密码,提高数据导入的安全性和准确性,同时提高导入数据的速度和质量。
图3示例了一种电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器(processor)310、通信接口(Communications Interface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行将excel文档导入数据库的方法,该方法包括:接收客户端发送的待导入excel文档的分片,并将所述分片写入临时表中;在将所述待导入excel文档的所有分片写入所述临时表后,将所述临时表和所述待导入excel文档待导入的数据库表进行对比,确定所述临时表中每行的导入操作类别;根据所述临时表中每行的导入操作类别,将所述临时表中每行的字段值导入所述数据库表中。
此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的将excel文档导入数据库的方法,该方法包括:接收客户端发送的待导入excel文档的分片,并将所述分片写入临时表中;在将所述待导入excel文档的所有分片写入所述临时表后,将所述临时表和所述待导入excel文档待导入的数据库表进行对比,确定所述临时表中每行的导入操作类别;根据所述临时表中每行的导入操作类别,将所述临时表中每行的字段值导入所述数据库表中。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的将excel文档导入数据库的方法,该方法包括:接收客户端发送的待导入excel文档的分片,并将所述分片写入临时表中;在将所述待导入excel文档的所有分片写入所述临时表后,将所述临时表和所述待导入excel文档待导入的数据库表进行对比,确定所述临时表中每行的导入操作类别;根据所述临时表中每行的导入操作类别,将所述临时表中每行的字段值导入所述数据库表中。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
- 一种将excel文件数据导入数据库的方法及装置
- Excel导入数据库的方法、装置、计算机设备及介质
- 一种将Excel表格数据导入数据库的方法及装置