当前位置: 首页 > java >正文

【Java】对于XML文档读取和增删改查操作与JDBC编程的读取和增删改查操作的有感而发

大家天天开心

文章目录

  • 前言
  • 一、学习XML的目的:
  • 二、XML和JDBC技术的分析:
    • 1.实现过程概览:
    • 2.区别:
  • 注意事项
  • 总结


前言

     在学习了一点关于XML技术的一点基础后,我们知道XML实际上是由一个个的元素和属性而组成,这个跟HTML DOM很像,都是封装成DOM对象然后取其属性啊,元素什么的,所以我就感觉跟JDBC编程里面增删改查特别像,所以写一篇文章来总结一下,下面大家一起来看看


提示:以下是本篇文章正文内容,下面案例可供参考

一、学习XML的目的:

  主要是用来做配置,包括像下的tomcat服务器里面,在conf文件夹里面就有xml文件,一般会记录端口号。

二、XML和JDBC技术的分析:

1.实现过程概览:

     JDBC:

  • 建立数据库连接:通过 DriverManager 获取数据库连接,通常使用 JDBC 的 URL、用户名、密码进行连接。
  • 执行 SQL 查询:通过 Statement 或 PreparedStatement 执行 SQL 查询。
  • 处理查询结果:使用 ResultSet 来接收查询结果,并通过 getString()getInt() 等方法获取列值。
  • 遍历结果集:通过 ResultSet 的 next() 方法遍历每一行数据,处理结果。

完整代码实例:

  Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动
Connection conn = DriverManager.getConnection(url, user, pass);//建立连接String sql = "SELECT name, email FROM users WHERE id = ?";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, 1);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {String name = rs.getString("name");String email = rs.getString("email");//增加
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "Alice");
pstmt.setString(2, "alice@example.com");
int affectedRows = pstmt.executeUpdate();//删除
String sql = "DELETE FROM users WHERE name = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "Alice");
int affectedRows = pstmt.executeUpdate();//更新
String sql = "UPDATE users SET email = ? WHERE name = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "new_email@example.com");
pstmt.setString(2, "Alice");
int affectedRows = pstmt.executeUpdate();//关闭
rs.close();
pstmt.close();
conn.close();

对于XML:

实现过程:

  • 读取 XML 文件:通过 SAXReader 类读取 XML 文件,并将其转换为 Document 对象。
  • 解析 XML 文档:通过 Document 对象,获取 XML 文件的根元素(getRootElement()),并遍历所有的子元素(例如 <student>)。
  • 获取元素内容:通过 Element 类的方法获取每个元素的值,如 name.getText()age.getText()
  • 遍历结构:通过 for 循环遍历每个元素及其子元素,读取数据并处理。

我给大家举一个我写的例子:

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.List;/*** @author 袁敬尧* @version 1.0*/
public class Homework {public static void main(String[] args) throws DocumentException {//1.得到解析器SAXReader saxReader = new SAXReader();//2.指定解析哪个xml文件Document document = saxReader.read(new File("src/books.xml"));//遍历所有book的元素List<Element> books = document.getRootElement().elements("book");for (Element book : books) {//取出 book 元素的所有信息Element name = book.element("name");Element author = book.element("author");Element price = book.element("price");String id = book.attributeValue("id");//创建成Book对象Book book1 = new Book();book1.setId(Integer.parseInt(id));book1.setName(name.getText());book1.setPrice(Double.parseDouble(price.getText()));book1.setAuthor(author.getText());System.out.println("book1 对象信息= " + book1);}}}

2.区别:

相同点:

  1. 数据源读取:两者的目标是从外部数据源中读取数据(XML 文件或数据库)。
  2. 逐条遍历:两者都需要逐条遍历数据。在 XML 解析中是遍历 XML 元素,在 JDBC 中是遍历查询结果集。
  3. 获取数据:在这两种情况下,读取到的数据都是通过相应的方法(getText() 或 getString() 等)从元素或字段中提取的。
  4. 处理结果:两者都可以对读取的数据进行处理(如输出、存储到数据结构等)。
  5. ​核心操作逻辑一致​​:无论是JDBC还是XML操作,都遵循着 ​​“建立连接 -> 执行操作 -> 处理结果 -> 释放资源”​​ 的基本流程。它们都实现了对持久化数据的CRUD操作。
  6. ​面向接口编程​​:两者都提供了丰富的API接口。JDBC定义了ConnectionStatementResultSet等接口;XML DOM解析定义了DocumentElementNode等接口。具体的实现由不同的驱动(如MySQL JDBC Driver)或解析器(如DOM4J)提供。
  7. ​需要资源管理​​:两者都需要谨慎管理资源以防止泄漏。JDBC必须关闭ConnectionStatementResultSet;XML操作虽然不涉及网络连接,但最终需要将内存中的数据树持久化到文件,并且IO流需要正确关闭。
  8. ​查询语言的运用​​:都能使用​​声明式语言​​进行精确查询。JDBC使用SQL,而XML处理可以使用XPath,它们都能极大地简化复杂查询的操作。

不同点:

  1. 数据格式

    • XML:读取的是结构化的 XML 文档数据,数据通常是层级结构的。
    • 数据库:读取的是表格数据,数据通常是关系型结构的,每一行代表一条记录,每一列代表一个字段。
  2. 工具与技术栈

    • XML 解析:使用的是专门的 XML 解析库,如 DOM4JSAX 或 JDOM,这些库帮助解析和处理 XML 数据。
    • JDBC:使用的是数据库连接和查询的 API,Java 提供了标准的 JDBC 接口来进行数据库操作。
  3. 结构处理方式

    • XML:XML 数据是层级化的,通常需要通过递归或者遍历树结构来解析每个节点及其子节点。
    • 数据库:数据库数据是表格化的,通常通过 SQL 语句来选择需要的字段和记录,结果集是平面结构的。
  4. 连接方式

    • XML:读取本地文件或远程 XML 文档,无需连接数据库。
    • 数据库:需要通过数据库连接字符串、用户名、密码等信息来连接数据库。
  5. 性能

    • XML:对于大型 XML 文档,可能需要消耗较多内存(特别是使用 DOM),而 SAX 解析则是基于事件的,内存占用较少。
    • 数据库:数据库查询通常可以利用索引、缓存等技术进行优化,查询性能较高。

 人工总结:

  1. 数据源与性质​​:

    • •​​JDBC​​:操作的是​​关系型数据库​​,数据是结构化的,存储在数据库服务器中,通常需要通过网络连接访问。操作对象是“表”、“行”、“列”。
    • •​​XML​​:操作的是​​文件​​,数据是半结构化的(树形结构),存储在本地文件系统或网络资源中。操作对象是“文档”、“元素”、“属性”、“文本节点”。
  2.  

    ​连接与会话​​:

    • •​​JDBC​​:必须显式管理数据库连接(Connection),这是一个重量级的对象,通常来自连接池以提升性能。
    • •​​XML​​:没有“连接”的概念,主要是​​将整个文档或部分内容加载到内存​​中形成一棵DOM树,然后在内存中进行操作。操作完成后,再一次性写回文件。
  3.  

    ​操作方式与性能​​:

    • •​​JDBC​​:通过发送SQL语句到数据库服务器执行。​​PreparedStatement​​可以预编译SQL,提高效率并防止SQL注入。适合处理大量数据的增删改。
    • •​​XML (DOM方式)​​:需将整个文档加载到内存,形成对象树后再操作。​​当XML文件很大时,会消耗大量内存​​(SAX解析模式是流式读取,适合大文件只读场景,但通常不用于修改)。增删改查都是在内存中完成,最后整体写回文件,不适合频繁写大规模数据。
  4.  

    ​事务处理​​:

    • •​​JDBC​​:提供了完整的事务支持(setAutoCommit(false)commit()rollback()),可以确保一系列操作的原子性。
    • •​​XML​​:​​没有内置的事务机制​​。保存文件是一个全有或全无的操作,但无法在多个XML文件之间或复杂操作中实现事务回滚。
  5.  

    ​架构与用途​​:

    • •​​JDBC​​:是Java访问数据库的​​标准API​​,主要用于企业应用的数据持久层,处理业务数据。
    • •​​XML​​:常用于​​配置文件​​、​​数据交换​​(如Web Service)、​​文档存储​​等场景。它的操作更多是对文档结构的管理。

注意事项:

从这些代码例子中,你可以更直观地感受到之前总结的异同:

  1. 1.​​抽象模式高度相似​​:无论是 JDBC 还是 XML DOM API,都提供了进行 CRUD 操作的一组接口和方法,学习了一种后另一种会更容易上手。
  2. 2.​​资源管理​​:JDBC 需要显式管理 ConnectionStatementResultSet 等资源,务必在 finally 块或使用 try-with-resources 语句中关闭它们,以防止资源泄漏。XML DOM 操作虽然不涉及网络连接,但最终需要将内存中的 DOM 树持久化到文件。
  3. 3.​​SQL 注入与预编译​​:JDBC 中使用 PreparedStatement 不仅可以​​预编译 SQL 提升效率​​,更重要的是可以​​有效防止 SQL 注入攻击​​。XML 操作则通常不涉及此类安全问题。
  4. 4.​​事务支持​​:JDBC 提供了​​完善的事务机制​​(setAutoCommit(false)commit()rollback()),可以确保一系列操作的原子性。而标准的 XML 文件操作​​缺乏内置的事务支持​​,保存文件是一个全有或全无的操作。

对于这点上还有点协同管理:

JDBC 和 XML 经常协同工作,一个常见的场景是:

  • •​​使用 XML 存储 JDBC 配置​​:将数据库连接参数(URL、用户名、密码)放在 XML 配置文件中,程序启动时读取并建立连接。
  • •​​数据交换与批量操作​​:从 XML 文件中读取数据,然后通过 JDBC 批量写入数据库,或者将数据库查询结果导出为 XML 格式用于数据交换。


总结

    总的来说,JDBC和XML操作在​​抽象模式和核心思路上高度相似​​,都是先建立“会话”,再通过特定命令操作数据,最后保存更改。这使得学会其中一种后,另一种的学习成本会大大降低。

它们的根本差异源于​​数据源的不同​​:一个是操作远程、结构化的数据库,另一个是操作本地、半结构化的文件。这直接导致了它们在连接管理、性能特点和适用场景上的分野。

http://www.xdnf.cn/news/19892.html

相关文章:

  • 加解密安全-侧信道攻击
  • Python分布式任务队列:万级节点集群的弹性调度实践
  • Unity 枪械红点瞄准器计算
  • linux内核 - 服务进程是内核的主要责任
  • dockerfile文件的用途
  • 机器能否真正语言?人工智能NLP面临的“理解鸿沟与突破
  • 键盘上面有F3,四,R,F,V,按下没有反应,维修记录
  • Echo- Go Web Framework的介绍
  • MCP over SSE 通信过程详解:双通道架构下的高效对话
  • 关于牙科、挂号、医生类小程序或管理系统项目 项目包含微信小程序和pc端两部分
  • 《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(1)
  • createrepo生成yum仓库元数据xml文件
  • 【机器学习学习笔记】逻辑回归实现与应用
  • 微信小程序预览和分享文件
  • AI生成内容的版权迷局:GPT-4输出的“创意”版权风险与规避之道
  • 解决服务器 DNS 解析失败,从这几步排查开始
  • MiniCPM-V 4.5 模型解析
  • 代码随想录算法训练营第二天| 209.长度最小的子数组
  • 变频器实习DAY42 VF与IF电机启动方式
  • 开源网络流量分析利器:tproxy
  • 嵌入式 - 硬件:51单片机(2)
  • daily notes[9]
  • 校园外卖点餐系统(代码+数据库+LW)
  • try-catch:异常处理的最佳实践与陷阱规避
  • MMD动画(一)模型、动作、音乐导入
  • Graphpad Prism 实战教程(一):小鼠体重变化曲线绘制全流程(含数据处理与图表美化)
  • 9月3日
  • 网格图--Day04--网格图DFS--2684. 矩阵中移动的最大次数,1254. 统计封闭岛屿的数目,130. 被围绕的区域
  • 现代软件栈全景解析,揭示从用户界面到基础设施的层层构建与关键技术
  • FFmpeg-Batch:GitHub开源视频批量处理工具,高效解决视频转格式与画质压缩需求