【java】xml文件表建立及读取环境搭建并采用DOM4J完成XML文件导入到数据库

这篇博客介绍了如何通过DOM4J在Java环境中搭建XML读取环境,建立XML对应的数据表,并利用PL/SQL导入SQL脚本。详细步骤包括XML文件处理、根据XML建表、数据库配置、DOM4J解析XML并批量导入数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    java一种简单的解析xml方法是用DOM进行解析, dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的,dom4j用于处理xml是很常用的技术,本篇博客介绍xml文件表建立及读取环境搭建并采用DOM4J完成XML文件导入到数据库。


1.XML文件



2.根据xml文件建表

表名:T_XML

字段:

       


使用PD建好表之后点击database选择database Generation导出为sql脚本


3.使用PL/SQL导入sql脚本


(1)选择脚本所在文件夹



(2)执行脚本

这样刷新就可以看到这张表了。


4.读取环境搭建



需要注意的是我们需要把dom4j用于处理xml是很常用的技术,把lib中的文件引入到classpath中




5.采用DOM4J完成XML文件导入到数据库

(1)数据库配置公共类DbUtil类部分:

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;

import com.bjpowernode.drp.util.JdbcConfig;
import com.bjpowernode.drp.util.XmlConfigReader;

/**
 * 封装数据常用操作
 * @author www
 *
 */
public class DbUtil {

	/**
	 * 取得Connection
	 * @return
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
			Class.forName(jdbcConfig.getDriverName());
			conn = DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(), jdbcConfig.getPassword());
		} 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)TestXMLImport类

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

package com.bjpowernode.xml;

import java.io.File;
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;

public class TestXMLImport {
	/*
	 * @param args
	 */
	public static void main(String[] args){
		String sql="insert into T_XML(NUMERO,REPOSICION,MOMBRE,TURNOS) values(?,?,?,?)";
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn =DbUtil.getConnection();
			pstmt =conn.prepareStatement(sql);
			//找到需要读取的XML文件的位置
			Document doc = new SAXReader().read(new File("G:/1.计算机/韦文文/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);
		}
	}
}


6.总结

(1)XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

(2)采用pstmt.addBatch(),把若干sql语句装载到一起,然后一次送到数据库执行,减少了数据的传输时间,执行只需要很短的时间,提高数据交互的效率。

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值