JDBC连接MySQL的基本步骤
下载并导入MySQL JDBC驱动
从MySQL官网或Maven仓库获取mysql-connector-java的jar包,版本需与MySQL服务端匹配。若使用Maven项目,在pom.xml中添加依赖:
XML
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
注册JDBC驱动并建立连接
通过Class.forName()加载驱动,使用DriverManager.getConnection()建立连接。连接URL格式为jdbc:mysql://主机:端口/数据库名,需提供用户名和密码:
java
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/testdb", "username", "password");
执行SQL操作
创建Statement对象
通过Connection对象的createStatement()方法创建Statement或PreparedStatement。推荐使用预编译语句防止SQL注入:
java
PreparedStatement pstmt = conn.prepareStatement(
"INSERT INTO users(name, age) VALUES(?, ?)");
pstmt.setString(1, "Alice");
pstmt.setInt(2, 25);
执行查询或更新
查询使用executeQuery()返回ResultSet,更新操作使用executeUpdate()返回受影响行数:
java
ResultSet rs = pstmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
System.out.println(rs.getString("name"));
}
int rows = pstmt.executeUpdate();
结果集处理与资源释放
遍历ResultSet获取数据
通过ResultSet的getXXX()方法按列名或索引获取数据,注意不同数据类型的对应方法:
java
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString(2); // 第二列
}
关闭资源
在finally块或使用try-with-resources确保关闭连接、语句和结果集:
java
try (Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement()) {
// 操作代码
} catch (SQLException e) {
e.printStackTrace();
}
事务管理与异常处理
启用事务
通过setAutoCommit(false)关闭自动提交,显式调用commit()或rollback():
java
conn.setAutoCommit(false);
try {
// 批量操作
conn.commit();
} catch (SQLException e) {
conn.rollback();
}
异常处理
捕获SQLException并处理特定错误代码(如主键冲突):
java
try {
// JDBC操作
} catch (SQLIntegrityConstraintViolationException e) {
System.out.println("数据约束冲突");
} catch (SQLException e) {
e.printStackTrace();
}
连接池优化
使用HikariCP等连接池
配置连接池参数替代直接创建连接,提升性能:
java
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost/testdb");
config.setUsername("user");
config.setPassword("pass");
HikariDataSource ds = new HikariDataSource(config);
Connection conn = ds.getConnection();