上一篇
在Java中无需框架访问网络,可使用
java.net.HttpURLConnection类实现,步骤如下:创建URL对象,打开连接,设置请求方法(如GET/POST),添加请求头,获取输入流读取响应数据,最后关闭连接,需注意异常处理和资源释放。
在Java开发中,即使不使用Spring、Hibernate等框架,也能通过JDBC(Java Database Connectivity)直接访问数据库,以下是详细步骤和注意事项,帮助开发者理解底层原理并实现高效安全的数据库操作。
为什么不用框架?
- 轻量化需求:小型项目或性能敏感场景可减少依赖。
- 学习原理:掌握JDBC有助于理解ORM框架的底层机制。
- 避免依赖冲突:减少第三方库的版本兼容问题。
- 灵活控制:直接管理连接和SQL执行过程。
JDBC访问数据库的6个核心步骤
以MySQL为例,需先导入驱动包(如mysql-connector-java-8.0.30.jar)。
加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver"); // 自动注册驱动
建立数据库连接
使用DriverManager获取连接,需指定URL、用户名和密码:

String url = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "123456";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
// 后续操作
}
创建Statement对象
try (Statement stmt = conn.createStatement()) {
// 执行SQL
}
执行SQL并处理结果
- 查询操作:
String sql = "SELECT id, name FROM users"; try (ResultSet rs = stmt.executeQuery(sql)) { while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } } - 更新操作:
String updateSql = "UPDATE users SET name='Bob' WHERE id=1"; int affectedRows = stmt.executeUpdate(updateSql); System.out.println("更新行数: " + affectedRows);
关闭资源(关键!)
使用try-with-resources自动关闭连接、Statement和ResultSet,避免资源泄漏:
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
// 操作数据...
} // 此处自动关闭资源
完整代码示例
import java.sql.*;
public class JdbcDemo {
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);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace(); // 实际项目中应记录日志
}
}
}
关键注意事项
防止SQL注入
禁止拼接SQL!使用PreparedStatement预处理参数:

String sql = "SELECT * FROM users WHERE email = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, "user@example.com"); // 安全设置参数
ResultSet rs = pstmt.executeQuery();
}
性能优化
- 连接池管理:避免频繁创建连接,用
DataSource替代DriverManager(如HikariCP):HikariConfig config = new HikariConfig(); config.setJdbcUrl(url); config.setUsername(user); config.setPassword(password); try (HikariDataSource ds = new HikariDataSource(config); Connection conn = ds.getConnection()) { // 操作数据库 } - 批处理:大量数据操作时使用
addBatch()和executeBatch()。
异常处理
捕获SQLException并明确处理:
try {
// 数据库操作
} catch (SQLException e) {
System.err.println("错误代码: " + e.getErrorCode());
System.err.println("SQL状态: " + e.getSQLState());
}
事务控制
通过Connection手动管理事务:

conn.setAutoCommit(false); // 关闭自动提交
try {
// 执行多个SQL
conn.commit(); // 提交事务
} catch (SQLException e) {
conn.rollback(); // 回滚
}
适用场景建议
- 适合:小型工具、原型验证、底层库开发。
- 不适合:大型企业应用(需框架提供事务管理、缓存等高级特性)。
引用说明
- Oracle官方JDBC教程
- MySQL Connector/J文档
- HikariCP连接池配置指南
通过JDBC直接操作数据库,开发者能深入理解Java与数据库的交互本质,为后续学习ORM框架打下坚实基础,务必重视资源关闭与安全防护,确保代码健壮可靠。
