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

【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.dtcms.com/a/364875.html

相关文章:

  • 面试题:JVM与G1要点总结
  • 告别 Hadoop,拥抱 StarRocks!政采云数据平台升级之路
  • 海思HI3516CV610-20S,HI3516CV610专为安防市场超高清智慧视觉SoC硬件设计的一款开发板
  • MongoDB 聚合查询超时:索引优化与分片策略的踩坑记录
  • Prometheus监控预警系统深度解析:架构、优劣、成本与竞品
  • CryptMsgGetParam函数分析之CMSG_INNER_CONTENT_TYPE_PARAM
  • 110个作品涨粉210万!用Coze智能体工作流1分钟生成爆款名著金句视频,无需剪辑,附详细教程
  • 【FastDDS】Layer DDS之Domain (01-overview)
  • 限流式保护器+安全用电云平台如何为企业安全用电做双重防护的?
  • 机器学习从入门到精通 - 手撕线性回归与梯度下降:从数学推导到Scikit-Learn实战
  • Scikit-learn Python机器学习 - 特征预处理 - 处理缺失值:SimpleImputer
  • 深度学习与 OpenCV 的深度羁绊:从技术协同到代码实践
  • 苍穹外卖项目实战(日记十四)-记录实战教程及问题的解决方法-(day3课后作业) 菜品停售启售功能
  • centos 压缩命令
  • 解决CentOS 镜像列表服务已下线或迁移导致镜像服务和仓库停止维护解决方案
  • Python:AI开发第一语言的全面剖析
  • Linux之centos 系统常用命令详解(附实战案例)
  • pytorch gpu版本安装(最新保姆级安装教程)
  • 【常用SQL语句和语法总结】
  • Keras/TensorFlow 中 `fit()` 方法参数详细说明
  • leetcode_234 回文链表
  • 如何画时序图、流程图
  • try-catch:异常处理的最佳实践与陷阱规避
  • 2025年互联网行业专业认证发展路径分析
  • RoPE频率缩放机制:解密大语言模型上下文扩展的核心算法
  • 无人机散热模块技术要点分析
  • Diamond基础3:在线逻辑分析仪Reveal的使用
  • 超越马力欧:如何为经典2D平台游戏注入全新灵魂
  • 【Spring Cloud微服务】10.王子、巨龙与Spring Cloud:用注解重塑微服务王国
  • Maven动态控制版本号秘籍:高效发包部署,版本管理不再头疼!