APP下载

基于XML的异构数据库信息交互机制的实现

2019-01-10圣文顺乔雨邵琳洁

物联网技术 2019年12期
关键词:信息交互

圣文顺 乔雨 邵琳洁

摘 要:随着网络和数据库技术的广泛应用,使得不同的业务系统之间需要进行更多的数据交互。如何便捷高效地在异构数据库之间传输这些数据成为实际应用中的一个重要议题。XML凭借其自身极强的平台适应性和可读性特点,在解决这个问题方面发挥了积极的作用。介绍了一种基于XML的异构数据库信息交互机制,通过实例的方式阐述了该方法具体的实现过程,并且结合实验结果验证了该方法的可行性。

关键词:XML;异构数据库;信息交互;Java;JDBC;SQL Server

中图分类号:TP391文献标识码:A文章编号:2095-1302(2019)12-00-04

0 引 言

随着互联网技术的飞速发展,各种分布式系统被广泛应用,由此产生了大量数据交互需求。在现实中,需要交互的系统使用不同数据库的现象非常普遍,为系统间的信息交流带来了极大不便,有时不得不为每套系统开发专用的数据导入导出工具。为了解决这个问题,我们引入XML(Extensible Markup Language)作为中间媒介来表示需要交互的数据。XML是通用的规范语言,具有操作简单、可扩展性强等特点,使得它适合作为信息交互的工具[1]。

1 XML简介

XML是一种可扩展的标记语言,由W3C组织于1998年2月制定,它继承了SGML(Standard Generalized Markup Language)的许多特性,但复杂性较SGML却大大降低。XML作为一种建模工具,可以方便地表示数据库中表的属性,并实现数据的存储[2]。

XML作为通用的语言规范,与具体的数据平台无关,在保存数据的同时也可以方便地对XML文件中的数据进行修改。因此将它作为不同数据库之间交互的统一接口进行数据的动态传输和修改[3]。

2 设计实现

2.1 设计思想

XML文档作为数据库信息交互过程中数据的载体,首先从源数据库获取数据,并按一定的格式存储为XML文档,经过必要处理后,再将数据导入目的数据库,如圖1所示。

利用XML实现异构数据库信息交互的两个基本步骤[4]如下。

(1)将源数据库中的数据信息导入XML文档中。

(2)将XML文档中的数据信息导入目的数据库中:在生成XML文档时,以数据库表为单位,每张表对应生成一个XML文档;文档的前半部分记录表自身的属性信息,后半部分记录表中的数据。结构如下:

<...>数据表属性信息

<...>数据

采用这种方式可以有效地映射出数据库的整体结构,并且可以方便地在XML文档中查询或者修改数据、表属性及其他中间操作,从而为导入目的数据库阶段提供合适的数据源。

2.2 开发语言

很多情况下,需要交互的数据库系统位于不同的系统平台上。Java作为一种流行的编程语言,其普及的关键原因在于其平台无关性,只要运行的平台上装有JVM(Java虚拟机)就可以执行Java程序。因此,将Java作为实现语言的首选[5]。

JDBC(Java Data Base Connectivity)是一种为Java语言提供连接关系型数据库的解决方案,它为开发者提供统一的API并屏蔽底层数据库操作接口的差异性,应用程序可以通过JDBC方便地与不同的数据库通信。

2.3 举例实现

以表1、表2中的数据为例,表Student中的Nationality为外键,对应表Nation中的ID。假设这些表原先存储在Oracle数据库中,现在要将其中的数据映射到SQL Server数据库的表中。

2.3.1 连接数据库并获取数据库信息

利用JDBC连接数据库,先加载Oracle的JDBC驱动器,然后使用DriverManager来建立数据库连接,方法如下:

String Driver="oracle.jdbc.driver.OracleDriver";

String URL="jdbc:oracle:thin:@IP:1521:orcl";

Class.forName(Driver).newInstance();

Connection con=DriverManager.getConnection(URL,usemame,password);

为了成功地将表映射到另一个数据库中,我们需要保存表自身的一些属性信息,包括表名、包含的列、列的数据类型、主外键关系等。由于Oracle数据库提供了专门的系统视图来记录这些信息,因此我们只需运用Select语句从中查询即可。表3中列出了其中的部分视图,其他大部分数据库如SQL Server等,都有类似的系统视图供查询信息。

2.3.2 把数据从Oracle数据库导入XML文档

(1)映射表的属性信息到XML

获取属性信息后,可以将它们保存在DTD文档中,也可以直接格式化在XML文档中,这里我们采用后者。

表Student的属性映射到XML文档:

<?xml version="1.0" encoding="UTF-8"?>

ID

NAME

AGE

NATIONALITY

ID

表Nation的属性映射到XML文档:

<?xml version="1.0" encoding="UtF-8"?>

ID

NATION

ID

从上面可以看到table标签包含两个属性,其中table_name为表名,fk表示该表是否含有外键,若无外键,可省略该属性。columns标签中包含表中所有的列。以表Nation为例,它包含两个列,ID和Nation,分别用子标签col表示。子标签中的type属性用来表示列的数据类型。

(2)将表中的数据映射到XML

XML文档中数据的组成模式参考数据库中的数据存储方式,采用数据行映射模式。表Student映射成XML文档:

<?xml version="1.0" encoding="UtF-8"?>

001

张琳娜

20

1

002

谢志双

21

l

表Nation映射成XML文檔:

<?xml version="1.0" encoding="UtF-8"?>

1

中国

2

美国

在上面的映射模式中,Rows标签中包含数据库表所有的行记录,其中,每个子标签Row代表一行记录,而每行的属性值则用表的列名称为子标签进行封装。

需要注意的是,XML文档仅封装可显示的文本。若表中的数据类型为BLOB等二进制数据类型,则需先将该值转换成可显示的文本值后再进行封装;通常使用BASE64算法将二进制数据转化成可显示的文本值,Java中也提供相应的API,如利用BASE64Encoder和BASE64Decoder完成二进制和可显示文本的相互转化。

2.3.3 把数据从XML文档导入SQL Server数据库

首先需要对XML文档进行分析,这部分工作需要调用XML DOM中的API来完成。DOM是由W3C定义的一套用来分析、验证及更新XML的工具。DOM需要将整篇XML文档读入内存中,生成一个相应的Document实例并对其进行分析[5-6]。

我们可以从文档的前半部分得到列的相应信息,然后再对Rows标签中的内容进行遍历分析,进而获取表中的数据。Rows标签中的内容可以看成一个树型结构,如图2所示,每个叶结点对应一个属性列,它的值就是我们要导入的数据。

导入数据库的工作利用JDBC完成,可以调用Statement类中的execute()方法执行insert SQL语句实现数据导入。建议使用PreparedStatement类代替Statement,因为大多数情况下导入一个表所需的SQL语句结构是相同的,不同之处在于导入的参数,在这种情况下可以事先用PreparedStatement类对相关SQL语句进行预编译。当需要执行语句时,只要根据导入值的数据类型选择相应的Set()方法将参数填入即可,可实现多次重用。在导入表的数据量很大时,使用该方式可以大幅提高效率。

2.3.4 XML文档导入数据库的顺序

在从XML文档导入数据到数据库时,由于某些表之间存在外键约束关系,使得写入数据时可能会发生错误。我们需要在导入数据前检查此类约束并暂时关闭,待数据导入后再重新启用。

对于某些不支持关闭约束检查的数据库,我们采用分组导入的方法。将所有的表分成有外键和无外键两组,先将无外键组的表导入数据库,再导入有外键组的表。由于可能出现级联外键的情况,如图3所示,因此需要循环导入有外键组的表,直到该组为空。

(1)将所有的XML文档按对应表中是否存在外键分成A,B两组,按任意顺序排序。无外键为A组,有外键为B组。

(2)将A组XML文檔中的数据导入数据库。

(3)遍历B组中的XML文档,并做操作:获取table标签的FK属性值,并判断其外键依赖的表所对应的XML文档是否在A组中,若已在A组中,则将该文档中的数据导入数据库并将其移至A组;否则,将其留在B组。

(4)重复执行步骤(3),直至B组为空。

2.4 性能分析

由于在导入阶段要进行大量数据库写操作,所以系统的耗时主要集中在XML映射到数据库的阶段。其中,若目的数据库允许先关闭约束检查再导入,则系统性能主要取决于JDBC对数据库的访问效率;若目的数据库不支持关闭约束检查功能,则需采用本文介绍的分组导入方法。

利用分组导入方法时,最坏情况为所有的表构成一个图3所示的级联外键链,在这种情况下,B组中有n-1张表。按最坏的情况考虑,系统需要访问XML文档的次数为(n-l)+(n-2)+...+1=(n2-n)/2次。系统对数据库的操作次数和先关闭约束检查再导入的情况相同,每个XML文档(n2-n)/2次。实践发现,分组导入方法和先关闭约束检查再导入方法性能相当,虽然后者访问XML的次数为n,但是访问XML文档的效率却远高于访问数据库的效率,且两种情况下访问数据库的次数相同,因此两者的性能基本持平。

3 结 语

XML作为数据库中信息交互的载体,具有操作简单、访问速度快、平台无关性等优点。纵观当前数据库技术的发展趋势,XML与数据库的结合越来越紧密,应用范围也越来越广,我们有理由相信,XML将在数据库应用领域发挥更大的作用。

参 考 文 献

[1]王丹.基于XML的用户界面模式标记语言UIPML[J].中国科技信息,2019(3).

[2]王晓刚.基于关系数据库的XML存储技术[J].中国高新技术企业,2011(5):88-89.

[3]李金来,吴涛.基于JSON数据交换的移动终端与服务器端异构数据库的数据交互[J].现代计算机(专业版),2016(11):55-58.

[4]刘思.基于XML中间件数据库间信息交换技术研究[M].天津:天津理工大学,2014.

[5] HU X L. Practice of CBL Teaching Method in Java Programming Teaching Based on Network Teaching Platform [C]// Proceedings of 2018 5th International Conference on Education,Management,Arts,Economics and Social Science(ICEMAESS 2018),2018.11.10.

[6]龙凤.基于XML和中间件的异构数据库集成研究[J].电子技术与软件工程,2013(10):236.

[7]邓林强,胡欣宇,王昕波.基于多源异构信息农业的应用与实现[J].物联网技术,2017,7(11):60-63.

[8]段继洲.基于XML的实验室异构数据库同步的设计与实现[D].成都:电子科技大学,2014.

[9]贾长云.基于XML的异构数据库数据交换的研究与实现—校园网信息管理平台中的数据交换[D].南京:河海大学,2005.

[10]王刚,张江.基于XML的异构数据库信息集成的研究与实现[J].电脑与信息技术,2005,13(1):39-42.

猜你喜欢

信息交互
如何补齐当前爱国主义舆论引导中的短板
基于邮件系统的虚拟网络社会管理的研究