您的位置:首页 > 编程语言 > Java开发

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

2016-08-18 21:02 525 查看
    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语句装载到一起,然后一次送到数据库执行,减少了数据的传输时间,执行只需要很短的时间,提高数据交互的效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: