zoukankan      html  css  js  c++  java
  • 【DRP】採用dom4j完毕XML文件导入数据库

    版权声明:本文为博主原创文章,未经博主同意不得转载。

    https://blog.csdn.net/lantingxv_jing/article/details/37762523


        xml文件在如今的web开发中扮演着重要的角色。从数据库连接配置到其它各种參数的设置,xml文件在反射技术的应用中举足轻重,也正由于xml文件里保存着如此重要的參数。所以对xml文件的读写操作就显得更加重要。以下我们重点解说一下dom4j完毕XML文件导入数据库。

    0、带读取的xml文件例如以下:


    1、利用PL/SQL导入SQL脚本,建立Oracle数据库表(表T_XML)结构,用于接收xml导入的数据

    2、依照下图,建立文件夹并导入对应文件

    通过引入的相关jar包,实现dom4j技术解析xml文件(dom4j-1.6.1.jar。jaxen-1.1-Beta-6.jar等jar包)。


    2.1、把lib中的文件引入到classpath中

        test_xmlImport右键properties-- Java Build Path--Libraries--Add External  JARs


    2.2、DbUtil.java中包括:

    xml配置文件。在该配置文件里设置了驱动名称,提供服务的url,用户名以及用户密码等内容

    数据库连接、关闭

    事务提交、回滚、重置

    package com.bjpowernode.xml;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    /**
     * 封装数据经常使用操作
     * @author Administrator
     *
     */
    public class DbUtil {
    
    	/**
    	 * 取得Connection
    	 * @return
    	 */
    	public static Connection getConnection() {
    		Connection conn = null;
    		try {
    ////		注冊驱动
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    ////		连接字符串(协议名:jdbc,子协议名: oracle:thin 子名称:@localhost:1521:oracleDB)
    
    			String url = "jdbc:oracle:thin:@localhost:1521:bjpowern";
    			String username = "drp1";
    			String password = "drp1";
    ////		获得链接
    			conn = DriverManager.getConnection(url, username, password);
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return conn;
    	}
    //	关闭数据库连接	
    	public static void close(Connection conn) {
    		if (conn != null) {
    			try {
    				conn.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	//关闭PreparedStatement
    	public static void close(Statement pstmt) {
    		if (pstmt != null) {
    			try {
    				pstmt.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	//关闭数据库连接
    	public static void close(ResultSet rs ) {
    		if (rs != null) {
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	//事务開始前的准备工作。设置为手动提交
    	public static void beginTransaction(Connection conn) {
    		try {
    			if (conn != null) {
    				if (conn.getAutoCommit()) {
    					conn.setAutoCommit(false); //手动提交
    				}
    			}
    		}catch(SQLException e) {}
    	}
    	//提交事务
    	public static void commitTransaction(Connection conn) {
    		try {
    			if (conn != null) {
    				if (!conn.getAutoCommit()) {
    					conn.commit();
    				}
    			}
    		}catch(SQLException e) {}
    	}
    	//回滚事务
    	public static void rollbackTransaction(Connection conn) {
    		try {
    			if (conn != null) {
    				if (!conn.getAutoCommit()) {
    					conn.rollback();
    				}
    			}
    		}catch(SQLException e) {}
    	}
    	//重置数据库连接。恢复到原来状态
    	public static void resetConnection(Connection conn) {
    		try {
    			if (conn != null) {
    				if (conn.getAutoCommit()) {
    					conn.setAutoCommit(false);
    				}else {
    					conn.setAutoCommit(true);
    				}
    			}
    		}catch(SQLException e) {}
    	}
    	
    	public static void main(String[] args) {
    		System.out.println(DbUtil.getConnection());
    	}
    }
    

    2.3、TestXMLImport类用于读取XML文件里的信息,并写入数据库表中

    package com.bjpowernode.xml;
    
    import java.io.File;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.Iterator;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class TestXMLImport {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		//想数据库表T_XML中导入数据的sql语句
    		String sql = "insert into T_XML(NUMERO, REPOSICION, NOMBRE, TURNOS) values (?, ?, ?, ?

    )"; Connection conn = null; PreparedStatement pstmt = null; try { conn = DbUtil.getConnection(); pstmt = conn.prepareStatement(sql); //找到须要读取的XML文件的位置 Document doc = new SAXReader().read(new File("D:/share/JavaProjects/drp/test_xmlImport/xml/test01.XML")); // 提取XML文件里指定节点的内容 List itemList = doc.selectNodes("/ACCESOS/item/SOCIO"); for (Iterator iter=itemList.iterator(); iter.hasNext();) { Element el = (Element)iter.next(); String numero = el.elementText("NUMERO"); String reposicion = el.elementText("REPOSICION"); String nombre = el.elementText("NOMBRE"); List turnosList = el.elements("TURNOS"); StringBuffer sbString = new StringBuffer(); for (Iterator iter1=turnosList.iterator(); iter1.hasNext();) { Element turnosElt = (Element)iter1.next(); String lu = turnosElt.elementText("LU"); String ma = turnosElt.elementText("MA"); String mi = turnosElt.elementText("MI"); String ju = turnosElt.elementText("JU"); String vi = turnosElt.elementText("VI"); String sa = turnosElt.elementText("SA"); String doo = turnosElt.elementText("DO"); sbString.append(lu + "," + ma + "," + mi + "," + ju + "," + vi + "," + sa + "," + doo); } pstmt.setString(1, numero); pstmt.setString(2, reposicion); pstmt.setString(3, nombre); pstmt.setString(4, sbString.toString()); //把这条运行语句加到PreparedStatement对象的批处理命令中  pstmt.addBatch(); } //把以上加入到批处理命令中的全部命令一次过提交给数据库来运行 pstmt.executeBatch(); System.out.println("将XML导入数据库成功!"); } catch (Exception e) { e.printStackTrace(); } finally { DbUtil.close(pstmt); DbUtil.close(conn); } } }

    讨论区:

    (1)XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
        XPath的作用与我们所经常使用的sql语句的作用是十分类似的,仅仅只是sql针对的是数据库操作,而XPath主要是针对xml文件的查询定位用的。

    (2)dom4j是用于读写XML的API.
    (3)之前在写入数据库的时候採用
    executeUpdate() ,而本文中我们採用addBatch(),它们之间有什么差别吗?

        pstmt.addBatch()把若干sql语句装载到一起,然后一次送到数据库运行。运行须要非常短的时间。 
        pstmt.executeUpdate() 是一条一条发往数据库运行的。

    时间都消耗在数据库连接的传输上面。


        由于数据库的处理速度是非常惊人的。单次吞吐量非常大,运行效率极高。在数据量越大的时候,越能体现前者的优势 。


        本文介绍了一个经常使用的知识点:dom4j完毕XML文件导入数据库。文章末尾简要介绍了一些XPath、dom4j的作用。并对照了addBatch()与executeUpdate() 的差别。希望能为您带来一些帮助。



查看全文
  • 相关阅读:
    请求内部转发与重定向区别
    JSTL标签
    JSP学习总结
    JSP执行过程
    Cookie实现--用户上次访问时间
    python 关键知识点
    PIL 学习
    python 与 matlab 混编
    matplotlib 中文显示 的问题
    中文文本分类1
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10861052.html
  • Copyright © 2011-2022 走看看