上一篇                     
               
			  Java不用框架如何实现数据库访问?
- 后端开发
- 2025-06-24
- 3511
 在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框架打下坚实基础,务必重视资源关闭与安全防护,确保代码健壮可靠。
 
  
			 
			 
			 
			 
			 
			 
			 
			