【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.区别:
相同点:
- 数据源读取:两者的目标是从外部数据源中读取数据(XML 文件或数据库)。
- 逐条遍历:两者都需要逐条遍历数据。在 XML 解析中是遍历 XML 元素,在 JDBC 中是遍历查询结果集。
- 获取数据:在这两种情况下,读取到的数据都是通过相应的方法(
getText()
或getString()
等)从元素或字段中提取的。 - 处理结果:两者都可以对读取的数据进行处理(如输出、存储到数据结构等)。
- 核心操作逻辑一致:无论是JDBC还是XML操作,都遵循着 “建立连接 -> 执行操作 -> 处理结果 -> 释放资源” 的基本流程。它们都实现了对持久化数据的CRUD操作。
- 面向接口编程:两者都提供了丰富的API接口。JDBC定义了
Connection
、Statement
、ResultSet
等接口;XML DOM解析定义了Document
、Element
、Node
等接口。具体的实现由不同的驱动(如MySQL JDBC Driver)或解析器(如DOM4J)提供。 - 需要资源管理:两者都需要谨慎管理资源以防止泄漏。JDBC必须关闭
Connection
、Statement
、ResultSet
;XML操作虽然不涉及网络连接,但最终需要将内存中的数据树持久化到文件,并且IO流需要正确关闭。 - 查询语言的运用:都能使用声明式语言进行精确查询。JDBC使用SQL,而XML处理可以使用XPath,它们都能极大地简化复杂查询的操作。
不同点:
-
数据格式:
- XML:读取的是结构化的 XML 文档数据,数据通常是层级结构的。
- 数据库:读取的是表格数据,数据通常是关系型结构的,每一行代表一条记录,每一列代表一个字段。
-
工具与技术栈:
- XML 解析:使用的是专门的 XML 解析库,如
DOM4J
、SAX
或JDOM
,这些库帮助解析和处理 XML 数据。 - JDBC:使用的是数据库连接和查询的 API,Java 提供了标准的
JDBC
接口来进行数据库操作。
- XML 解析:使用的是专门的 XML 解析库,如
-
结构处理方式:
- XML:XML 数据是层级化的,通常需要通过递归或者遍历树结构来解析每个节点及其子节点。
- 数据库:数据库数据是表格化的,通常通过 SQL 语句来选择需要的字段和记录,结果集是平面结构的。
-
连接方式:
- XML:读取本地文件或远程 XML 文档,无需连接数据库。
- 数据库:需要通过数据库连接字符串、用户名、密码等信息来连接数据库。
-
性能:
- XML:对于大型 XML 文档,可能需要消耗较多内存(特别是使用
DOM
),而SAX
解析则是基于事件的,内存占用较少。 - 数据库:数据库查询通常可以利用索引、缓存等技术进行优化,查询性能较高。
- XML:对于大型 XML 文档,可能需要消耗较多内存(特别是使用
人工总结:
-
数据源与性质:
- •JDBC:操作的是关系型数据库,数据是结构化的,存储在数据库服务器中,通常需要通过网络连接访问。操作对象是“表”、“行”、“列”。
- •XML:操作的是文件,数据是半结构化的(树形结构),存储在本地文件系统或网络资源中。操作对象是“文档”、“元素”、“属性”、“文本节点”。
-
连接与会话:
- •JDBC:必须显式管理数据库连接(
Connection
),这是一个重量级的对象,通常来自连接池以提升性能。 - •XML:没有“连接”的概念,主要是将整个文档或部分内容加载到内存中形成一棵DOM树,然后在内存中进行操作。操作完成后,再一次性写回文件。
- •JDBC:必须显式管理数据库连接(
-
操作方式与性能:
- •JDBC:通过发送SQL语句到数据库服务器执行。PreparedStatement可以预编译SQL,提高效率并防止SQL注入。适合处理大量数据的增删改。
- •XML (DOM方式):需将整个文档加载到内存,形成对象树后再操作。当XML文件很大时,会消耗大量内存(SAX解析模式是流式读取,适合大文件只读场景,但通常不用于修改)。增删改查都是在内存中完成,最后整体写回文件,不适合频繁写大规模数据。
-
事务处理:
- •JDBC:提供了完整的事务支持(
setAutoCommit(false)
,commit()
,rollback()
),可以确保一系列操作的原子性。 - •XML:没有内置的事务机制。保存文件是一个全有或全无的操作,但无法在多个XML文件之间或复杂操作中实现事务回滚。
- •JDBC:提供了完整的事务支持(
-
架构与用途:
- •JDBC:是Java访问数据库的标准API,主要用于企业应用的数据持久层,处理业务数据。
- •XML:常用于配置文件、数据交换(如Web Service)、文档存储等场景。它的操作更多是对文档结构的管理。
注意事项:
从这些代码例子中,你可以更直观地感受到之前总结的异同:
- 1.抽象模式高度相似:无论是 JDBC 还是 XML DOM API,都提供了进行 CRUD 操作的一组接口和方法,学习了一种后另一种会更容易上手。
- 2.资源管理:JDBC 需要显式管理
Connection
、Statement
、ResultSet
等资源,务必在finally
块或使用 try-with-resources 语句中关闭它们,以防止资源泄漏。XML DOM 操作虽然不涉及网络连接,但最终需要将内存中的 DOM 树持久化到文件。 - 3.SQL 注入与预编译:JDBC 中使用
PreparedStatement
不仅可以预编译 SQL 提升效率,更重要的是可以有效防止 SQL 注入攻击。XML 操作则通常不涉及此类安全问题。 - 4.事务支持:JDBC 提供了完善的事务机制(
setAutoCommit(false)
,commit()
,rollback()
),可以确保一系列操作的原子性。而标准的 XML 文件操作缺乏内置的事务支持,保存文件是一个全有或全无的操作。
对于这点上还有点协同管理:
JDBC 和 XML 经常协同工作,一个常见的场景是:
- •使用 XML 存储 JDBC 配置:将数据库连接参数(URL、用户名、密码)放在 XML 配置文件中,程序启动时读取并建立连接。
- •数据交换与批量操作:从 XML 文件中读取数据,然后通过 JDBC 批量写入数据库,或者将数据库查询结果导出为 XML 格式用于数据交换。
总结
总的来说,JDBC和XML操作在抽象模式和核心思路上高度相似,都是先建立“会话”,再通过特定命令操作数据,最后保存更改。这使得学会其中一种后,另一种的学习成本会大大降低。
它们的根本差异源于数据源的不同:一个是操作远程、结构化的数据库,另一个是操作本地、半结构化的文件。这直接导致了它们在连接管理、性能特点和适用场景上的分野。