当前位置: 首页> 汽车> 时评 > 2-【JavaWeb】深入理解JDBC

2-【JavaWeb】深入理解JDBC

时间:2025/7/10 10:14:34来源:https://blog.csdn.net/weixin_44329069/article/details/142131764 浏览次数: 0次

JDBC

Java Web JDBC 教程

1. 安装 JDBC

在现代的 Java 开发环境中,许多项目已经转向了使用构建工具如 MavenGradle 来管理依赖库,而不再需要手动添加 JAR 文件。

1. 项目设置与依赖管理

如果你使用的是 MavenGradle,可以通过配置文件来自动下载和管理 JDBC 驱动程序,而不是手动添加 JAR 文件。

1.1 使用 Maven 作为依赖管理工具

如果你是使用 Maven 的项目,可以在项目的 pom.xml 文件中添加相应的 JDBC 驱动依赖:

<dependencies><!-- MySQL JDBC 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>
</dependencies>

添加依赖后,Maven 会自动下载并管理这些库。

1.2 使用 Gradle 作为依赖管理工具

对于 Gradle 项目,可以在 build.gradle 文件中添加依赖:

dependencies {implementation 'mysql:mysql-connector-java:8.0.33'
}
1.3 手动添加 JDBC 驱动(传统方法)

如果没有使用 Maven 或 Gradle,可以下载 MySQL JDBC 驱动程序 并将其添加到项目中。

  • Eclipse 中:右键点击项目 > Properties > Java Build Path > Libraries > Add External JARs,选择下载的 JAR 文件。
  • IntelliJ IDEA 中:右键点击项目 > Open Module Settings > Dependencies > + > JARs or directories,选择下载的 JAR 文件。

2. 数据库连接与驱动管理

2.1 创建数据库和表

我们以 MySQL 为例,先创建一个简单的 Users 表。可以在 MySQL 控制台执行以下 SQL 命令:

mysql -u root -p
CREATE DATABASE yourdatabase;
USE yourdatabase;CREATE TABLE Users (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(100)
);
2.2 数据库连接代码

使用 JDBC 连接到 MySQL 数据库的 Java 代码示例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class DatabaseConnection {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/yourdatabase";String user = "root";String password = "password";try (Connection conn = DriverManager.getConnection(url, user, password)) {System.out.println("成功连接到数据库!");} catch (SQLException e) {e.printStackTrace();}}
}
  • URL 格式: jdbc:mysql://localhost:3306/yourdatabase
    • jdbc:mysql:// 指定使用的数据库是 MySQL。
    • localhost:3306 是 MySQL 数据库的地址与端口。
    • yourdatabase 是数据库名。
  • Connection 类: 用于建立与数据库的连接。
  • DriverManager: 管理 JDBC 驱动程序的加载与连接。

3. SQL 语句的执行

3.1 DML 操作:插入、更新和删除

你可以使用 StatementPreparedStatement 执行插入、更新或删除数据的 SQL 语句:

import java.sql.*;public class DMLExample {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/yourdatabase";String user = "root";String password = "password";try (Connection conn = DriverManager.getConnection(url, user, password);Statement stmt = conn.createStatement()) {// 插入数据String insertSQL = "INSERT INTO Users (id, name, email) VALUES (1, 'Alice', 'alice@example.com')";stmt.executeUpdate(insertSQL);// 更新数据String updateSQL = "UPDATE Users SET email = 'alice.new@example.com' WHERE id = 1";stmt.executeUpdate(updateSQL);// 删除数据String deleteSQL = "DELETE FROM Users WHERE id = 1";stmt.executeUpdate(deleteSQL);System.out.println("DML 操作成功!");} catch (SQLException e) {e.printStackTrace();}}
}
3.2 DQL 操作:查询数据

查询操作需要使用 executeQuery() 方法,并处理 ResultSet 对象:

import java.sql.*;public class QueryExample {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/yourdatabase";String user = "root";String password = "password";try (Connection conn = DriverManager.getConnection(url, user, password);Statement stmt = conn.createStatement()) {String query = "SELECT * FROM Users";ResultSet rs = stmt.executeQuery(query);while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");String email = rs.getString("email");System.out.println("用户ID: " + id + ", 姓名: " + name + ", 邮箱: " + email);}} catch (SQLException e) {e.printStackTrace();}}
}

4. 批处理操作

批处理操作可以通过一次性提交多条 SQL 语句提高性能:

try (Connection conn = DriverManager.getConnection(url, user, password);Statement stmt = conn.createStatement()) {conn.setAutoCommit(false);  // 禁用自动提交stmt.addBatch("INSERT INTO Users (id, name, email) VALUES (2, 'Bob', 'bob@example.com')");stmt.addBatch("INSERT INTO Users (id, name, email) VALUES (3, 'Charlie', 'charlie@example.com')");int[] results = stmt.executeBatch();  // 执行批处理conn.commit();  // 提交事务System.out.println("批处理操作成功!");
} catch (SQLException e) {conn.rollback();  // 在出现错误时回滚e.printStackTrace();
}

5. 防止 SQL 注入:使用 PreparedStatement

PreparedStatement 可以防止 SQL 注入攻击,并能动态传递参数:

import java.sql.*;public class SafeQuery {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/yourdatabase";String user = "root";String password = "password";try (Connection conn = DriverManager.getConnection(url, user, password)) {String loginSQL = "SELECT * FROM Users WHERE name = ? AND email = ?";PreparedStatement pstmt = conn.prepareStatement(loginSQL);pstmt.setString(1, "Alice");pstmt.setString(2, "alice@example.com");ResultSet rs = pstmt.executeQuery();if (rs.next()) {System.out.println("登录成功!");} else {System.out.println("登录失败!");}} catch (SQLException e) {e.printStackTrace();}}
}
6. 事务管理

事务管理在涉及多条 SQL 语句时非常重要,尤其是在数据一致性要求较高的情况下:

try (Connection conn = DriverManager.getConnection(url, user, password)) {conn.setAutoCommit(false);  // 禁用自动提交,开始事务// 插入和更新操作String sql1 = "INSERT INTO Users (id, name, email) VALUES (4, 'David', 'david@example.com')";String sql2 = "UPDATE Users SET email = 'david.new@example.com' WHERE id = 4";try (Statement stmt = conn.createStatement()) {stmt.executeUpdate(sql1);stmt.executeUpdate(sql2);}conn.commit();  // 成功后提交事务System.out.println("事务提交成功!");
} catch (SQLException e) {conn.rollback();  // 出现错误时回滚e.printStackTrace();
}

总结:

  1. 使用 Maven 或 Gradle 管理 JDBC 依赖。
  2. 如何使用 JDBC 连接数据库,执行 DML(数据操作语言)和 DQL(数据查询语言)操作。
  3. 实现批处理和 PreparedStatement,以避免 SQL 注入攻击。
  4. 如何使用事务确保数据操作的原子性和一致性。
关键字:2-【JavaWeb】深入理解JDBC

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: