`

利用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
分享到:
评论

相关推荐

    Java实现XML导入不同数据库,从数据库导出数据到XML

    在IT行业中,数据库管理和数据交换是至关重要的环节。Java作为一种广泛应用的编程语言,提供了丰富的库和工具来处理这些任务。本项目"Java实现XML导入不同数据库,从数据库导出数据到XML"着重展示了如何利用Java技术...

    XML和数据库之间的数据交换PPT优秀资料.ppt

    XML和数据库之间的数据交换是指在XML文档和数据库之间交换数据的过程。这种交换可以实现数据的同步、备份、恢复和传输等功能。本节主要介绍了XML和数据库之间的数据交换的基本概念、方法和技术。 1. 导出数据库数据...

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

    通过在成都理工大学“多用户教材管理系统”的升级改造项目中的实践,证明了利用XML技术可以有效地解决异构数据库之间的数据交换问题。尽管还存在一些挑战,但通过不断优化技术方案和实施策略,可以进一步提高数据...

    xml自动调用数据库数据填写表单

    3. 数据持久化:将数据库中的数据转换为XML格式,方便在不同系统间进行数据交换,同时也支持批量操作和离线处理。 三、自动填写表单 1. 动态生成:通过解析XML文档,动态生成HTML表单元素,根据XML中的数据填充表单...

    xml中的数据导入数据库

    XML(eXtensible Markup Language)是一种用于存储和传输数据的结构化格式,它独立于软件和硬件,常用于在不同系统间交换数据。在IT领域,将XML数据导入数据库是一项常见的任务,尤其是在需要整合来自不同来源的数据...

    利用xml技术连接数据库

    利用XML技术连接数据库,是现代软件开发中一个常用的方法,特别是在需要跨平台、跨系统交互或者需要进行数据持久化的情况下。 XML文件的结构清晰,数据和结构分离,使得数据可以独立于显示和处理的方式存在。这种...

    XML在虚拟数据库管理系统中的应用

    VDBMS可以利用XML的强大功能,实现从多个来源获取数据并整合成统一格式的功能。 2. **数据转换**:通过XSLT(Extensible Stylesheet Language Transformations)等技术,可以方便地将其他格式的数据转换为XML文档...

    xml.rar_xml 数据库_数据库 XML

    在关系型数据库中,数据通常以表格的形式存储,而在XML数据库中,数据是以文档的形式存储,每个文档都是一个独立的数据单元。这种差异影响了数据的访问和处理方式。例如,XML数据库更适合处理半结构化或非结构化数据...

    xml与数据库间转换

    本篇文章将深入探讨XML与数据库间的转换,以及如何利用XML生成Dataset来处理数据。 首先,我们来理解什么是Dataset。Dataset是.NET Framework中的一个类,它可以存储和操作离线数据,类似于在内存中的小型数据库。...

    XML与数据库数据的交互技术研究

    XML与数据库数据的交互技术是现代信息系统中不可或缺的一部分,尤其是在需要跨平台、跨系统进行数据交换的场景下。通过对XML与关系数据库之间转换技术的研究,我们可以更好地利用这两种技术的优势,实现高效、安全的...

    XML技术与数据库的发展

    XML的设计目标是强调数据的结构和语义,而不是展示方式,使得数据能够在不同的系统之间进行有效的共享和交换。 在数据库领域,XML的出现对传统的关系型数据库提出了挑战,因为关系型数据库并不总是最适合存储和处理...

    XML文档数据库数据之间的转换原理及转换对象

    文章作者刘刚,来自哈尔滨银行双鸭山分行,同时是同济大学软件工程硕士在读研究生,他深入探讨了将XML文件数据导入一般关系数据库的方法,强调了XML作为数据交换载体在Web应用中的重要性和灵活性。 ### XML与数据库...

    XML与数据库相互转换

    在VS2003中,开发者可以利用.NET Framework提供的强大工具和API来实现这一目标,提高数据处理的效率和灵活性。对于"数据库中的表.txt"和"Convertxml"这两个文件,它们可能分别提供了数据库结构的信息和转换的实现...

    以XML作为数据库进行数据的增删改查

    本示例将深入探讨如何使用XML作为数据库来实现数据的增删改查操作,这对于不依赖传统数据库系统或者在分布式环境中处理数据的场景特别有用。 首先,让我们理解XML的基本结构。XML文档由一系列的元素构成,每个元素...

    基于XML的异构数据库集成

    【基于XML的异构数据库集成】是针对当前企业与校园信息管理系统中普遍存在的异构数据问题提出的一种解决方案。随着数据信息的快速增长,由于不同数据库的多样性,信息资源的异构性已经成为阻碍信息交流的主要障碍。 ...

Global site tag (gtag.js) - Google Analytics