在实际的Java Web开发中,JDBC (Java Database Connectivity) 是我们连接Java应用程序与各种关系型数据库的关键桥梁。作为系列文章的第一章,本文将以一个常见的开发场景入手:如何在IntelliJ IDEA这款主流IDE中配置并使用JDBC连接数据库,并完成简单的数据插入操作。许多开发者在初学 JDBC 时,都会遇到各种环境配置问题,例如驱动包冲突、连接字符串错误等,本文将手把手带你避开这些坑。
问题场景:从零开始搭建JDBC连接
假设我们需要开发一个简单的用户管理系统,首先需要将用户数据存储到数据库中。这就需要在IntelliJ IDEA 中配置 JDBC,并编写代码连接数据库,执行 SQL 语句来插入新的用户数据。常见的数据库选择包括 MySQL, PostgreSQL, Oracle 等,这里我们以 MySQL 为例。
底层原理:JDBC 的工作机制
JDBC 的核心在于提供一套标准的 API,允许 Java 程序与不同数据库进行交互。JDBC 驱动程序负责将 JDBC API 的调用转换为特定数据库的协议,从而实现数据的读取和写入。JDBC 驱动充当了一个翻译器的角色,它让应用程序无需关心底层数据库的细节,只需要按照 JDBC 规范进行操作即可。
其工作流程大致如下:
- 加载驱动:Java 程序通过
Class.forName()方法加载特定数据库的 JDBC 驱动类。 - 建立连接:使用
DriverManager.getConnection()方法,提供数据库连接 URL、用户名和密码,建立与数据库的连接。 - 创建 Statement/PreparedStatement:通过 Connection 对象创建 Statement 或 PreparedStatement 对象,用于执行 SQL 语句。PreparedStatement 可以预编译 SQL 语句,提高执行效率,并防止 SQL 注入。
- 执行 SQL 语句:使用 execute(), executeQuery(), executeUpdate() 等方法执行 SQL 语句。
- 处理结果:如果是查询语句,则通过 ResultSet 对象获取查询结果。
- 关闭连接:使用 try-finally 块确保连接资源被释放,避免资源泄露。
具体步骤:IDEA 中配置 JDBC 连接 MySQL
添加 MySQL JDBC 驱动:

- Maven 依赖:如果你的项目使用 Maven 进行依赖管理,可以在
pom.xml文件中添加 MySQL Connector/J 依赖。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <!-- 请替换为最新版本 --> </dependency>- 手动添加 JAR 包:也可以从 MySQL 官网下载 Connector/J 的 JAR 包,然后将 JAR 包添加到 IDEA 项目的 classpath 中。在 IDEA 中,可以通过 File -> Project Structure -> Modules -> Dependencies,点击
+号,选择JARs or directories...,然后选择下载好的 JAR 包。
- Maven 依赖:如果你的项目使用 Maven 进行依赖管理,可以在
编写 JDBC 连接代码:
import java.sql.*; public class JdbcExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/your_database?serverTimezone=UTC"; // 替换为你的数据库 URL String user = "your_username"; // 替换为你的用户名 String password = "your_password"; // 替换为你的密码 try { // 1. 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 建立连接 Connection connection = DriverManager.getConnection(url, user, password); // 3. 创建 PreparedStatement String sql = "INSERT INTO users (name, email) VALUES (?, ?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, "张三"); // 设置第一个参数 preparedStatement.setString(2, "zhangsan@example.com"); // 设置第二个参数 // 4. 执行 SQL 语句 int rowsAffected = preparedStatement.executeUpdate(); // 5. 处理结果 System.out.println("成功插入 " + rowsAffected + " 条数据"); // 6. 关闭连接 preparedStatement.close(); connection.close(); } catch (ClassNotFoundException e) { System.err.println("找不到 JDBC 驱动:" + e.getMessage()); } catch (SQLException e) { System.err.println("数据库连接失败:" + e.getMessage()); } } }代码解释:

Class.forName("com.mysql.cj.jdbc.Driver"):加载 MySQL 驱动。DriverManager.getConnection(url, user, password):建立数据库连接。PreparedStatement:使用预编译的 SQL 语句,防止 SQL 注入。preparedStatement.setString(1, "张三"):设置 SQL 语句的参数。preparedStatement.executeUpdate():执行 INSERT 语句,返回受影响的行数。
配置数据库连接池 (可选,但强烈推荐)
直接使用 DriverManager 管理数据库连接,在大并发场景下性能会迅速下降。更推荐使用数据库连接池,比如 HikariCP,Druid 等。它们可以预先创建并维护一定数量的数据库连接,从而避免频繁创建和销毁连接的开销,提高性能。

以 HikariCP 为例,添加 Maven 依赖:
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>5.0.1</version> </dependency>修改代码:
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class JdbcExample { public static void main(String[] args) { HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/your_database?serverTimezone=UTC"); config.setUsername("your_username"); config.setPassword("your_password"); config.setDriverClassName("com.mysql.cj.jdbc.Driver"); config.setMaximumPoolSize(10); // 设置连接池大小 HikariDataSource ds = new HikariDataSource(config); try (Connection connection = ds.getConnection(); // 从连接池获取连接 PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO users (name, email) VALUES (?, ?)")) { preparedStatement.setString(1, "张三"); preparedStatement.setString(2, "zhangsan@example.com"); int rowsAffected = preparedStatement.executeUpdate(); System.out.println("成功插入 " + rowsAffected + " 条数据"); } catch (SQLException e) { System.err.println("数据库操作失败:" + e.getMessage()); } finally { ds.close(); // 关闭连接池 } } }
实战避坑经验
- 时区问题:MySQL 8.0 版本需要指定
serverTimezone,否则可能会出现时区错误。可以在 JDBC URL 中添加?serverTimezone=UTC或其他合适的时区。 - 驱动版本兼容性:选择与你的 MySQL 版本兼容的 Connector/J 版本。过高或过低的驱动版本都可能导致连接失败。
- 连接池配置:合理配置连接池的大小,避免连接数过少导致请求阻塞,或连接数过多消耗系统资源。可以根据实际业务负载进行调整,观察 CPU、内存和数据库的性能指标。对于高并发应用,可以考虑使用类似 Nginx 的反向代理服务器,配合负载均衡策略,将请求分发到多台数据库服务器上,提高系统的整体吞吐量。
- SQL 注入风险:始终使用 PreparedStatement 来执行 SQL 语句,避免 SQL 注入攻击。
- 异常处理:使用 try-catch-finally 块处理 SQLException,确保连接资源被释放,避免资源泄露。尤其要注意在 finally 块中关闭连接。
总结
本文详细介绍了如何在 IntelliJ IDEA 中配置 JDBC 连接 MySQL 数据库,并完成简单的数据插入操作。从 Maven 依赖管理到连接池配置,从 PreparedStatement 的使用到异常处理,希望能够帮助你快速上手 JDBC 开发,并避免常见的坑。 掌握 JDBC 的基本使用是成为一名合格的 Java 后端开发工程师的必备技能。在后续的文章中,我们将继续深入探讨 JDBC 的高级特性,例如事务管理、批量操作等,敬请期待。
冠军资讯
半杯凉茶