JDBCTest13类: 专门进行查询,并且使用行级锁/悲观锁,锁住相关的记录 JDBCTest14类: 负责修改被锁定的记录 测试: 在JDBCTest13中的conn.commit();前添加断点,debug后 运行JDBCTest14程序,出现loaded classes are up to date,nothing to reload 将JDBCTest13resume pragram后,JDBCTest14程序成功执行更新语句 JDBCTest13类代码: package com.bjpowernode.jdbc; import com.bjpowernode.jdbc.utils.DBUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * @Author:杨青 * @Time:2021/10/27 11:05 * @Description: * 这个事务专门进行查询,并且使用行级锁/悲观锁,锁住相关的记录 */ public class JDBCTest13 { public static void main(String[] args) { Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; try { //获取连接 conn=DBUtil.getConnection(); conn.setAutoCommit(false); //开启事务 //获取预处理数据库操作对象 String sql="select ename,job,sal from emp where job=? for update"; ps=conn.prepareStatement(sql); ps.setString(1,"manager"); //执行sql语句 rs=ps.executeQuery(); //处理查询结果集 while (rs.next()){ System.out.println(rs.getString("ename")+","+rs.getString("job")+","+rs.getDouble("sal")); } conn.commit(); //提交事务 } catch (SQLException throwables) { throwables.printStackTrace(); if(conn!=null){ try { conn.rollback(); } catch (SQLException e) { e.printStackTrace(); } } }finally { DBUtil.close(conn,ps,rs); } } } JDBCTest14代码: package com.bjpowernode.jdbc; import com.bjpowernode.jdbc.utils.DBUtil; import java.sql.*; /** * @Author:杨青 * @Time:2021/10/27 11:06 * @Description: * 这个程序负责修改被锁定的记录 */ public class JDBCTest14 { public static void main(String[] args) { Connection conn=null; PreparedStatement ps=null; try { conn= DBUtil.getConnection(); conn.setAutoCommit(false); String sql ="update emp set sal=sal*1.1 where job=?"; ps=conn.prepareStatement(sql); ps.setString(1,"manager"); int count=ps.executeUpdate(); System.out.println("count:"+count); conn.commit(); } catch (SQLException throwables) { if(conn!=null){ try { conn.rollback(); } catch (SQLException e) { e.printStackTrace(); } } throwables.printStackTrace(); }finally { DBUtil.close(conn,ps,null); } } }