【DRP】采用dom4j完成XML文件导入数据库
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 (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() 的区别。希望能为您带来一些帮助。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Hibernate多态映射可映射继承类到数据库,提供以下映射类型:joined-subclass:为子类创建单独表,包含父类所有列。table-per-class:为子类创建单独表,仅包含子类特有列。union-subclass:类似joined-subclass,但父类表联合所有子类列。

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

HTML无法直接读取数据库,但可以通过JavaScript和AJAX实现。其步骤包括建立数据库连接、发送查询、处理响应和更新页面。本文提供了利用JavaScript、AJAX和PHP来从MySQL数据库读取数据的实战示例,展示了如何在HTML页面中动态显示查询结果。该示例使用XMLHttpRequest建立数据库连接,发送查询并处理响应,从而将数据填充到页面元素中,实现了HTML读取数据库的功能。

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

Go语言中使用os.Rename函数重命名文件,语法为:funcRename(oldpath,newpathstring)error。该函数将oldpath指定的文件重命名为newpath指定的文件。示例包括简单重命名、移动文件到不同目录以及忽略错误处理。Rename函数执行原子操作,在两个文件位于同一目录时可能仅更新目录项,跨卷或正在使用的文件重命名可能失败。

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

使用PHPXML函数处理XML数据:解析XML数据:simplexml_load_file()和simplexml_load_string()加载XML文件或字符串。访问XML数据:利用SimpleXML对象的属性和方法获取元素名称、属性值和子元素。修改XML数据:使用addChild()和addAttribute()方法添加新元素和属性。序列化XML数据:asXML()方法将SimpleXML对象转换为XML字符串。实战案例:解析产品馈送XML,提取产品信息,转换并将其存储到数据库中。
