MySQL Java 连接与使用
MySQL 是最流行的开源关系型数据库之一,而 Java 是企业级应用开发中最常用的编程语言。将 Java 与 MySQL 结合使用,可以构建强大的数据驱动型应用程序。
本文将详细介绍如何在 Java 程序中连接和使用 MySQL 数据库,包括:
本文介绍了 Java 连接和使用 MySQL 数据库的基本步骤,包括:
- 加载 JDBC 驱动
- 建立数据库连接
- 执行 SQL 查询和更新
- 使用 PreparedStatement 防止 SQL 注入
- 事务管理
- 资源关闭
- 最佳实践
准备工作
下载 MySQL JDBC 驱动
Java 通过 JDBC (Java Database Connectivity) 技术与数据库交互。要连接 MySQL,你需要下载 MySQL Connector/J 驱动:
- 访问 MySQL Connector/J 下载页面
- 选择与你的 Java 版本兼容的驱动版本
- 下载 JAR 文件(如 mysql-connector-java-8.0.xx.jar)
将驱动添加到项目
根据你使用的开发工具或构建工具(如 Eclipse、IntelliJ IDEA、Maven 或 Gradle),将下载的 JAR 文件添加到项目的类路径中。
建立数据库连接
加载驱动程序
在 Java 代码中,首先需要加载 MySQL JDBC 驱动:
实例
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("MySQL JDBC 驱动未找到");
e.printStackTrace();
}
创建连接
使用 DriverManager.getConnection()
方法建立与数据库的连接:
实例
String username = "你的用户名";
String password = "你的密码";
try {
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功!");
} catch (SQLException e) {
System.out.println("数据库连接失败");
e.printStackTrace();
}
3.2.1 连接参数说明
jdbc:mysql://localhost:3306/
:MySQL 服务器的默认地址和端口useSSL=false
:禁用 SSL 连接(开发环境)serverTimezone=UTC
:设置服务器时区,避免时区问题
执行 SQL 操作
创建 Statement 对象
Statement 对象用于执行静态 SQL 语句:
实例
执行查询
使用 executeQuery()
方法执行 SELECT 语句:
实例
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
执行更新
使用 executeUpdate()
方法执行 INSERT、UPDATE 或 DELETE 语句:
实例
int rowsAffected = statement.executeUpdate(insertSQL);
System.out.println("影响的行数: " + rowsAffected);
使用 PreparedStatement
PreparedStatement 可以防止 SQL 注入,提高性能:
实例
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "张三");
preparedStatement.setString(2, "zhangsan@example.com");
int rowsInserted = preparedStatement.executeUpdate();
System.out.println("插入的行数: " + rowsInserted);
事务管理
基本概念
事务是一组要么全部成功要么全部失败的 SQL 操作。事务操作示例
实例
// 关闭自动提交
connection.setAutoCommit(false);
// 执行多个 SQL 操作
statement.executeUpdate("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
statement.executeUpdate("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
// 提交事务
connection.commit();
System.out.println("事务执行成功");
} catch (SQLException e) {
// 发生错误时回滚
connection.rollback();
System.out.println("事务执行失败,已回滚");
e.printStackTrace();
} finally {
// 恢复自动提交
connection.setAutoCommit(true);
}
关闭资源
为什么需要关闭资源
数据库连接是有限的资源,使用后必须关闭以避免资源泄漏。
如何正确关闭资源
实例
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
6.3 使用 try-with-resources
Java 7+ 可以使用 try-with-resources 自动关闭资源:
实例
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {
while (rs.next()) {
// 处理结果
}
} catch (SQLException e) {
e.printStackTrace();
}
最佳实践
使用连接池
生产环境中应使用连接池(如 HikariCP、c3p0)管理数据库连接:
实例
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/你的数据库");
config.setUsername("用户名");
config.setPassword("密码");
HikariDataSource dataSource = new HikariDataSource(config);
Connection connection = dataSource.getConnection();
处理异常
正确处理 SQL 异常,提供有意义的错误信息:
实例
// 数据库操作
} catch (SQLException e) {
System.err.println("SQL 错误: " + e.getMessage());
System.err.println("SQL 状态: " + e.getSQLState());
System.err.println("错误代码: " + e.getErrorCode());
}
7.3 使用 DAO 模式
将数据访问逻辑封装在 Data Access Object (DAO) 中,提高代码的可维护性:
实例
private Connection connection;
public UserDao(Connection connection) {
this.connection = connection;
}
public User getUserById(int id) throws SQLException {
String sql = "SELECT * FROM users WHERE id = ?";
try (PreparedStatement stmt = connection.prepareStatement(sql)) {
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
return new User(rs.getInt("id"), rs.getString("name"));
}
}
return null;
}
}
通过掌握这些基础知识,你已经可以开始在 Java 应用程序中使用 MySQL 数据库了。随着经验的积累,你可以进一步学习更高级的主题,如连接池、ORM 框架(如 Hibernate、MyBatis)等。
点我分享笔记