java行锁表锁_java_行级锁

悲观锁(行级锁):事务必须排队执行 数据按住了 不允许并发(行级锁:select后面添加for update)

乐观锁: 支持并发 事务也不需要排队 只不过需要一个版本号

开启俩个程序进行演示

1.程序01启动后开启悲观锁进行查询 在没有提交之前 02会被卡住不能查询

2.等待程序01commit完成后,程序02才能继续执行

public class lockTest01 {

public static void main(String[] args) {

Connection con = null;

PreparedStatement ps = null;

ResultSet rs = null;

try {

con = DBUtil.getConnect();

con.setAutoCommit(false);

String sql = "select *from t_student where classno = ? for update";

ps = con.prepareStatement(sql);

ps.setInt(1,102);

rs = ps.executeQuery();

while (rs.next()){

System.out.println(rs.getString("sno")+","+rs.getString("sname"));

}

con.commit();

} catch (SQLException throwables) {

try {

con.rollback();

} catch (SQLException e) {

e.printStackTrace();

}

throwables.printStackTrace();

}finally {

DBUtil.close(con,ps,rs);

}

}

}

public class lockTest02 {

public static void main(String[] args) {

Connection con = null;

PreparedStatement ps = null;

try {

con = DBUtil.getConnect();

con.setAutoCommit(false);

String sql = "update t_student set grade = grade*0.8 where classno =?";

ps = con.prepareStatement(sql);

ps.setInt(1,102);

int count = ps.executeUpdate();

System.out.println(count);

con.commit();

} catch (SQLException throwables) {

try {

con.rollback();

} catch (SQLException e) {

e.printStackTrace();

}

throwables.printStackTrace();

}finally {

DBUtil.close(con,ps,null);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值