日期:2014-05-16  浏览次数:20714 次

利用XML在不同数据库中交换数据
XML在不同语言,不同数据源中交换数据已经成为主流。在这些的DRP项目中,王勇也提到了使用XML在不同数据库中交换数据,达到安全,灵活的目的。不过他只是提到有这么一种方法,做了其中的一部分工作。因为感觉这种技术非常实用,这里我把这个过程补充完整。



开发环境:

sql server  2008数据库,Oracle数据库,PL/SQL,MyEclipse开发环境。


将sql数据库一个表中的数据库导出到xml文件中,再通过dom4j读取xml文件,将xml中的数据写入到Oracle数据库中。

一:分析表结构,建立目标数据库表。

既然是不同的数据库,但是数据库表结果应该是一样的,在实际项目中,一般是首先分析表结构。利用已经存在的xml文件,或者数据库表,在目的数据库中建立对应的表。原数据库与目标数据库的表结构是一致的。



二:将sql server数据库中的数据导出成xml文件。

一般情况为了安全起见,不会开放数据库,只能将数据库中的数据导出到xml。Sql server导出到xml的方法如下:

利用sql查询语句

[sql] view plaincopy

    select * from classInfo for xml path('my'),root('myRoot') 



这里的classInfo是表名称,for xml path是关键语句,表示查询结果以xml的形式输出。其中括号和其中的my可以省略。它代表xml文件的一个行目录,每一个my代表数据库的一条记录,my是自己命名的节点名称,可以是任意名称。root('myRoot')代表xml文件的根目录是myRoot,也可以自己命名。


数据库中的记录为:


生成的xml文件为:
[html] view plaincopy

    <myRoot> 
      <my> 
        <classNo>07</classNo> 
        <classes>07</classes> 
        <grade>2008</grade> 
        <classSize>90</classSize> 
        <collegeNo>01</collegeNo> 
        <specialtyNo>01001</specialtyNo> 
        <assistant></assistant> 
        <remark>无</remark> 
        <IsEffective>是</IsEffective> 
      </my> 
      <my> 
        <classNo>09</classNo> 
        <classes>音乐</classes> 
        <grade>如:2008</grade> 
        <classSize>90</classSize> 
        <collegeNo>06</collegeNo> 
        <specialtyNo>09</specialtyNo> 
        <assistant></assistant> 
        <remark>无</remark> 
        <IsEffective>是</IsEffective> 
      </my> 
      <my> 
        <classNo>123</classNo> 
        <classes>faf</classes> 
        <grade>如:2008</grade> 
        <classSize>22</classSize> 
        <collegeNo>01</collegeNo> 
        <specialtyNo>234r</specialtyNo> 
        <assistant>234</assistant> 
        <remark>af</remark> 
        <IsEffective>是</IsEffective> 
      </my> 
      <my> 
        <classNo>323</classNo>&nb