• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

【DRP】采用dom4j完成XML文件导入数据库

mysql 搞代码 4年前 (2022-01-09) 20次浏览 已收录 0个评论

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

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 (ClassNotFound<i>本文来源gaodai$ma#com搞$$代**码网</i>Exception 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() 的区别。希望能为您带来一些帮助。




搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:【DRP】采用dom4j完成XML文件导入数据库

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址