JDBC(Java Database Connectivity)是Java应用程序与数据库之间的桥梁,它为数据库连接提供了统一的API。在Java中连接MySQL数据库,常见的有两种方式:使用标准的JDBC驱动和使用连接池。
1. 标准JDBC驱动
这种方法是最基本的数据库连接方式,直接使用Java提供的JDBC API连接数据库。优点是简单,容易实现,适合于小型应用或学习目的。缺点是每次建立连接都需要打开一个新的物理连接,性能较低,不适合于生产环境。
示例代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/test_db";
String username = "root";
String password = "123456";
try {
// 加载MySQL JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取数据库连接
Connection connection = DriverManager.getConnection(url, username, password);
// 创建一个Statement对象
Statement statement = connection.createStatement();
// 执行一个查询
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
// 处理查询结果
while (resultSet.next()) {
System.out.println("User: " + resultSet.getString("username"));
}
// 关闭资源
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. 使用连接池
连接池是在应用程序启动时创建一定数量的数据库连接,并在程序运行过程中复用这些连接的机制。优点是提高了数据库连接性能,适合于生产环境。缺点是需要额外引入连接池库,配置稍微复杂一些。
常见的连接池有C3P0、HikariCP、DBCP等,这里以HikariCP为例(因为它性能较好,配置简单):
添加HikariCP Maven依赖:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
示例代码:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class JdbcWithHikariCPExample {
public static void main(String[] args) {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/test_db");
config.setUsername("root");
config.setPassword("123456");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
HikariDataSource dataSource = new HikariDataSource(config);
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
while (resultSet.next()) {
System.out.println("User: " + resultSet.getString("username"));
}
resultSet.close();
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这两种方法都可以实现连接MySQL数据库并执行查询操作,但在实际生产环境中推荐使用连接池,以提高性能。