当前位置: 首页 > news >正文

JDBC执行sql过程

1. 加载数据库驱动​

JDBC 通过 ​​驱动(Driver)​​ 实现与不同数据库的通信。驱动需提前加载到 JVM:

手动加载(JDBC 4.0 前)​​:

Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL 驱动类

自动加载(JDBC 4.0+)​​:通过 SPI 机制自动识别驱动类,无需显式调用。

​2. 建立数据库连接

通过 DriverManager 或 ​​连接池(如 HikariCP)​​ 获取 Connection 对象:

String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false";

String user = "root";

String password = "123456";

Connection conn = DriverManager.getConnection(url, user, password);

3. 创建 Statement 对象​

JDBC 提供三种执行 SQL 的接口:

​接口​​特点​
Statement静态 SQL,存在 SQL 注入风险,适用于简单查询。
PreparedStatement预编译 SQL,参数化传递,防止 SQL 注入,适合重复执行或含动态参数的 SQL。
CallableStatement调用存储过程。

示例:使用 PreparedStatement

String sql = "SELECT id, name FROM users WHERE age > ?";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, 18); // 设置参数(索引从 1 开始)

4. 执行 SQL 并处理结果​

执行 SQL​

查询操作​​(返回 ResultSet):

ResultSet rs = pstmt.executeQuery();

更新操作​​(返回影响行数):

int rowsAffected = pstmt.executeUpdate(); // INSERT/UPDATE/DELETE

处理结果集​

while (rs.next()) { int id = rs.getInt("id");

// 按列名获取 String name = rs.getString(2); // 按索引获取(从 1 开始)

System.out.println(id + ": " + name); }

结果集类型​​:

  • TYPE_FORWARD_ONLY:默认,只能向前遍历。
  • TYPE_SCROLL_INSENSITIVE:可滚动,不感知数据库变化。
  • TYPE_SCROLL_SENSITIVE:可滚动,感知数据库变化(多数驱动不实现)。

5. 事务管理(可选)

通过 Connection 控制事务:

try { conn.setAutoCommit(false); // 关闭自动提交

        // 执行多个 SQL...

        conn.commit(); // 提交事务

} catch (SQLException e) {

        conn.rollback(); // 回滚事务

} finally {

        conn.setAutoCommit(true); // 恢复自动提交

}

​隔离级别​​:通过 conn.setTransactionIsolation(level) 设置(如 READ_COMMITTED)。

​6. 释放资源​

必须显式关闭资源​​以避免内存泄漏和连接耗尽:

try {

        if (rs != null) rs.close();

        if (pstmt != null) pstmt.close();

        if (conn != null) conn.close(); // 实际中连接池会回收而非真正关闭

} catch (SQLException e) {

        e.printStackTrace();

}

相关文章:

  • Unity.UGUI DrawCall合批笔记
  • onGAU:简化的生成式 AI UI界面,一个非常简单的 AI 图像生成器 UI 界面,使用 Dear PyGui 和 Diffusers 构建。
  • 移动零--双指针
  • 【Java ee初阶】网络原理
  • P1725 琪露诺
  • 代码随想录第41天:图论2(岛屿系列)
  • PPT图表怎么制作?说5款自己使用过的PPT图表制作工具
  • 遗传算法组卷系统实现(Java版)
  • Web 架构之容灾方案深度解析
  • ThinkPad T440P如何从U盘安装Ubuntu24.04系统
  • Cadence学习笔记之---导入PCB板框、网表
  • 贪心算法专题(Part2)
  • 简述Web和HTTP
  • 机器学习 day02
  • 【OpenCV】imread函数的简单分析
  • 计算机网络基础科普
  • 学习黑客了解Python3的“HTTPServer“
  • 社区商城分销合作合规承诺书
  • MacOS 用brew 安装、配置、启动Redis
  • Jsp技术入门指南【十二】自定义标签
  • 迪拜金融市场CEO:2024年市场表现出色,超八成新投资者来自海外
  • 教育部、国家发改委联合启动实施教师教育能力提升工程
  • 东亚社会的“苦难诗学”:从《苦尽柑来遇见你》说起
  • 李云泽:对受关税影响较大、经营暂时困难的市场主体,一企一策提供精准服务
  • 怎样正确看待体脂率数据?或许并不需要太“执着”
  • 马上评|子宫肌瘤惊现男性患者,如此论文何以一路绿灯?