做开发的时候,经常要让程序和数据库打交道。比如你写了个小工具,想把用户注册信息存进MySQL,这时候就得用Java连上数据库。这事儿不复杂,但得一步步来,不然容易卡在半道上。
先搞清楚要用什么驱动
Java本身不能直接读数据库,得靠JDBC(Java Database Connectivity)这套机制。不同的数据库有不同的驱动包,比如MySQL就得下载mysql-connector-java.jar。现在大多数项目都用Maven管理依赖,加一行就行:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
写代码连上数据库
有了驱动,接下来就是写代码。假设你的数据库叫test_db,用户名root,密码123456,那连接代码长这样:
import java.sql.Connection;
import java.sql.DriverManager;
public class DbConnect {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/test_db";
String user = "root";
String password = "123456";
try {
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println("连接成功!");
} catch (Exception e) {
System.out.println("连接失败:" + e.getMessage());
}
}
}
运行之后如果看到“连接成功”,说明已经通了。不过别高兴太早,本地跑通不代表上线就没问题。有时候公司内网数据库端口没开,或者防火墙拦着,照样连不上。
别忘了处理资源和异常
实际项目里可不能像上面那样简单try一下就完事。Connection、Statement、ResultSet这些资源不用了必须关掉,否则时间一长就会内存溢出。推荐用try-with-resources写法,自动释放:
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {
while (rs.next()) {
System.out.println(rs.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
}
连接池能提升性能
每次操作都新建连接,速度慢还耗资源。高并发场景下,建议用连接池,比如HikariCP。它配置简单,性能也好。初始化一个数据源,后面取连接就像从桶里拿水一样方便:
HikariConfig config = new HikariConfig();
config.setJdbcUrl(url);
config.setUsername(user);
config.setPassword(password);
config.setMaximumPoolSize(10);
HikariDataSource dataSource = new HikariDataSource(config);
// 用的时候
try (Connection conn = dataSource.getConnection()) {
// 执行SQL
}
这种方式适合频繁访问数据库的应用,比如后台管理系统、订单处理服务。启动时建好一批连接,反复利用,省时又稳定。
常见问题注意点
连不上别急着改代码,先看报错信息。常见的“UnknownHostException”是主机名不对,“Access denied”一般是密码错了。还有时候URL写成了localhost,部署到服务器后根本访问不到,得换成真实IP。
另外,JDBC默认不开启SSL,如果数据库要求加密连接,记得在URL后面加上?useSSL=true&requireSSL=true,不然会被拒绝。