java 加载sql xml文件,【DRP】采用dom4j完成XML文件导入数据库

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

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

9bcb2c47d4a0cdddac0d4b93dddb12a2.png

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

49a775a3bd6708794fa2115d3aa6e0e8.png

22d2e49533a75210518fd476fd7d1766.png

2、按照下图,建立目录并导入相应文件

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

27c9e95dc3a158a1db93cfd6e0de5b08.png

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

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

a502cd408580a5851dd9b87e562e5cbe.png

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()

的区别。希望能为您带来一些帮助。

原文:http://blog.csdn.net/zhaolijing2012/article/details/37762523

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值