`

利用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> 
        <classes>33</classes> 
        <grade>20093</grade> 
        <classSize>33</classSize> 
        <collegeNo>01</collegeNo> 
        <specialtyNo>就</specialtyNo> 
        <assistant>234</assistant> 
        <remark>333</remark> 
        <IsEffective>是</IsEffective> 
      </my> 
      <my> 
        <classNo>999</classNo> 
        <classes>信息2班</classes> 
        <grade>2008</grade> 
        <classSize>80</classSize> 
        <collegeNo>01</collegeNo> 
        <specialtyNo>03</specialtyNo> 
        <assistant>234</assistant> 
        <remark>好</remark> 
        <IsEffective>是</IsEffective> 
      </my> 
     
    </myRoot> 


三:配置开发环境,编写读取XML文件和写入数据库的语句。

上文中已经说到了如何读取xml文件。这里利用dom4j读取配置文件,将xml中的数据读取出来。

数据库助手类,负责连接,关闭数据库
[java] view plaincopy

    package com.lsh.testXML; 
     
    import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.PreparedStatement; 
    import java.sql.SQLException; 
    /**
     * 数据库工具类
     * @author 李守宏
     *
     */ 
    public class DBUtil { 
     
        /**
         * 取得数据库连接
         * @return
         */  
        public static Connection getConnection() { 
            Connection conn = null; 
            try { 
                Class.forName("oracle.jdbc.driver.OracleDriver"); 
                String dbUrl = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; 
                String username = "drp"; 
                String password = "drp"; 
                conn = DriverManager.getConnection(dbUrl, username, password); 
            } catch (ClassNotFoundException e) { 
                e.printStackTrace(); 
            } catch (SQLException e) { 
                e.printStackTrace(); 
            } 
            return conn; 
        } 
        //关闭preparedStatement 
        public static void close(PreparedStatement pstmt) { 
            if (pstmt != null) { 
                try { 
                    pstmt.close(); 
                } catch (SQLException e) { 
                    e.printStackTrace(); 
                } 
            } 
        } 
        //关闭connection 
        public static void close(Connection conn) { 
            if (conn != null) { 
                try { 
                    conn.close(); 
                } catch (SQLException e) { 
                    e.printStackTrace(); 
                }    
            } 
        } 
    } 




执行读取xml和写入oracel数据库的程序:

[java] view plaincopy

    package com.lsh.testXML; 
     
    import java.sql.Connection; 
    import java.sql.PreparedStatement; 
    import java.util.Iterator; 
    import java.util.List; 
     
    import org.dom4j.Document; 
    import org.dom4j.DocumentException; 
    import org.dom4j.Element; 
    import org.dom4j.io.SAXReader; 
    /**
     * 利用dom4j读取xml,再写入到oracel数据库中
     * @作者 李守宏——七期信息技术提高班
     * @创建日期 2012-2-18
     */ 
    public class test { 
     
        /**
         * @param args
         */ 
        public static void main(String[] args) { 
            try { 
                //my.xml位于classpath路径下,也可以放到其他路径,这里只要指明路径就行 
                Document doc = new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream("my.XML")); 
                xmlTODB(doc.selectNodes("/myRoot/my")); 
     
            } catch (DocumentException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
        } 
         
        private static void xmlTODB(List itemList){ 
            String sql = "insert into classInfo(Classno,Classes,Grade,Classsize,Collegeno,Specialtyno,Assistant,Remark,Iseffective)" + 
                    " values(?,?,?,?,?,?,?,?,?)"; 
            Connection conn = null; 
            PreparedStatement pstmt = null; 
             
            try{ 
                conn = DBUtil.getConnection(); 
                pstmt = conn.prepareStatement(sql); 
            //迭代获取xml每个节点的值,将xml读出的数据看成一个list 
            for(Iterator iter=itemList.iterator();iter.hasNext();){ 
                Element elt = (Element)iter.next(); 
                String classNo = elt.elementText("classNo"); 
                String classes =elt.elementText("classes"); 
                String grade =  elt.elementText("grade"); 
                String classSize = elt.elementText("classSize"); 
                String specialtyNo = elt.elementText("specialtyNo"); 
                String collegeNo = elt.elementText("collegeNo"); 
                String assistant = elt.elementText("assistant"); 
                String remark = elt.elementText("remark"); 
                String isEffective = elt.elementText("IsEffective"); 
                 
                pstmt.setString(1, classNo); 
                pstmt.setString(2, classes); 
                pstmt.setString(3, grade); 
                pstmt.setString(4, classSize); 
                pstmt.setString(5, specialtyNo); 
                pstmt.setString(6, collegeNo); 
                pstmt.setString(7, assistant); 
                pstmt.setString(8, remark); 
                pstmt.setString(9, isEffective); 
     
                pstmt.addBatch(); 
            } 
                pstmt.executeBatch(); 
                System.out.println("ok"); 
            }catch(Exception e){ 
                e.printStackTrace(); 
            }finally{ 
                DBUtil.close(conn); 
                DBUtil.close(pstmt); 
            } 
        } 
    } 


PS:注意在sql中不区分大小写,在xml中区分大小写。

原文地址:http://blog.csdn.net/lsh6688/article/details/7272088
分享到:
评论

相关推荐

    利用JDOM实现XML文档和数据库之间的数据交换

    利用JDOM实现XML文档和数据库之间的数据交换

    用XML实现异构数据库信息交换

    以成都理工大学“多用户...据库之间的数据转换,验证在异构数据库环境下应用 XML技术进行数据交换的可行性。详细介绍了系统的实现技 术,讨论了存在的问题。系统运行结果表明,利用 XML能够实现不同领域异构资源的共享

    论文研究-利用Web服务和XML实现数据库同步.pdf

    XML(可扩展标记语言)以其自描述性和便于传输的优势迅速成为网络上交换数据的存储格式。Web服务的应用使得Web应用程序可以透明地访问服务,请求参数和响应结果是被序列化进入SOAP消息中的。结合Web服务和XML技术的...

    面向服务架构SOA跨平台数据交换和搜索

    “面向服务架构(SOA)的跨平台数据交换与搜索”系统(简称IDB,internet database 互联网数据库)在模仿大脑记忆的基础上设计出了智能的“准一维数据结构”,并利用“准一维数据结构” 从根本上解决了异构数据源问题...

    xmlbean轻轻松松读写XML的利器

    转《利用XMLBean轻轻松松读写XML》 XML在Java应用程序里变得越来越重要, 广泛应用于数据存储和交换. 比如我们常见的配置文件,都是以XML方式存储的. XML还应用于Java Message Service和Web Services等技术作为数据...

    XML高级编程

    他们会根据具体情况利用XML解决数据交换的问题并说明具体细节。这条主线的一个题外话就是对无线应用协议(Wireless Application Protocol, WAP)的讨论,它与第14章中XML在无线标记语言(Wireless Markup Language, ...

    XML - 报表数据的新大陆.rar

    如果报表工具能利用这些XML数据,则可以减少数据库查询和报表数据运算操作,因为这些XML数据的始作俑者已经完成了这些操作。因此说XML是报表数据的新大陆。 传统的报表工具都是只能处理关系型数据库,基本上不能...

    多系统间数据转换系统毕业论文

    因此,在系统的进一步开发以及系统信息集成中,如何充分利用各部门已建立的数据库资源,实现不同数据库间的连接、数据交换、数据共享和协同工作,已经成为企业自动化和信息化建设的一个关键问题。为了提高公司所用...

    面向数据集成的空间数据源wrapper 技术的研究.pdf

    数据集成系统支持访问网络上不同位置的异构数据源,数据集成系统不仅能集成传统的数据库中的结构化数据,而且还可以集成在web 上应用日益广泛的半结构化 数据。异构数据集成系统的研究也成为当前数据集成研究的一个...

    用XML-DBMS技术实现关系数据库间的数据交换* (2004年)

    XML-DBMS是一种在关系数据库之间互相交换数据的技术。笔者从XML-DBMS映射语言出发具体介绍了如何建立关系数据库和XML文档之间的MAP映射关系,以及如何利用MAP语言来实现关系数据库和XML文档之间的数据交换,同时结合...

    JDBC 3.0数据库开发与设计

    8.2.2 XML在数据库中的应用模式 8.2.3 XML数据交换技术及应用 8.3 使用JSP和XML两种技术建设动态网站 8.3.1 XML存储数据的优点 8.3.2 XML文档中的Picture对象定义 8.3.3 JSP文档与XML的结合 8.4 用XML和XSL...

    异构数据库数据交换的安全解决方案 (2006年)

    本文论述了如何利用Java,XML和DOM技术来解决医保系统跨平台异构数据库的数据交换问题,重点论述使用公开密钥、消息机制、数字签名、数字证书以及双向认证等几种技术,来解决数据传输和交换中的安全问题。

    基于Geodatabase的地籍数据库系统.doc

    (2)对于已经存在的多种格式的数据:shape files、Coverages、INFO Table、dBASETables等以及其它系统中的数据格式:ArcStorm、Map LIBATIAN等,可以通过ArcCatalog来转换并输入到地理数据库中,然后用ArcCatalog...

    ado[1].net中文手册 学习 ado.net的重要资料

    由于 XML 是用于在网络中传输数据集的格式,因此可以读取 XML 格式的任何组件都可以处理数据。实际上,接收组件根本不必是 ADO.NET 组件:传输组件可以只是将数据集传输给其目标,而不考虑接收组件的实现方式。目标...

    信息办公XML考试系统-xmlks.rar

    该系统集成了用户管理、试题编辑、试卷生成、在线答题和成绩统计等核心功能,通过使用XML作为数据交换格式,保证了数据的结构化存储与灵活处理。系统采用了MVC(模型-视图-控制器)设计模式,确保了代码的模块化和可...

Global site tag (gtag.js) - Google Analytics