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

来源:互联网 发布:乐清市知临学校招聘 编辑:程序博客网 时间:2024/05/11 20:00

    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();}}}//关闭PreparedStatementpublic 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语句装载到一起,然后一次送到数据库执行,减少了数据的传输时间,执行只需要很短的时间,提高数据交互的效率。

0 0
原创粉丝点击