当前位置:首页 > 后端开发 > 正文

Java不用框架如何实现数据库访问?

在Java中无需框架访问网络,可使用 java.net.HttpURLConnection类实现,步骤如下:创建URL对象,打开连接,设置请求方法(如GET/POST),添加请求头,获取输入流读取响应数据,最后关闭连接,需注意异常处理和资源释放。

在Java开发中,即使不使用Spring、Hibernate等框架,也能通过JDBC(Java Database Connectivity)直接访问数据库,以下是详细步骤和注意事项,帮助开发者理解底层原理并实现高效安全的数据库操作。


为什么不用框架?

  1. 轻量化需求:小型项目或性能敏感场景可减少依赖。
  2. 学习原理:掌握JDBC有助于理解ORM框架的底层机制。
  3. 避免依赖冲突:减少第三方库的版本兼容问题。
  4. 灵活控制:直接管理连接和SQL执行过程。

JDBC访问数据库的6个核心步骤

以MySQL为例,需先导入驱动包(如mysql-connector-java-8.0.30.jar)。

加载数据库驱动

Class.forName("com.mysql.cj.jdbc.Driver"); // 自动注册驱动

建立数据库连接

使用DriverManager获取连接,需指定URL、用户名和密码:

Java不用框架如何实现数据库访问?  第1张

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(); // 回滚
}

适用场景建议

  • 适合:小型工具、原型验证、底层库开发。
  • 不适合:大型企业应用(需框架提供事务管理、缓存等高级特性)。

引用说明

  1. Oracle官方JDBC教程
  2. MySQL Connector/J文档
  3. HikariCP连接池配置指南

通过JDBC直接操作数据库,开发者能深入理解Java与数据库的交互本质,为后续学习ORM框架打下坚实基础,务必重视资源关闭与安全防护,确保代码健壮可靠。

0