悲观锁、乐观锁

悲观锁(行及锁):

如果要操作某些数据,先提前锁定这些数据,其他任何事务都不能对该数据进行修改,不允许并发,效率较低;

SELECT * FROM `login` WHERE l_id>3 FOR UPDATE;

代表login表中id大于3的数据被锁定,不能被修改;

乐观锁:

演示悲观锁demo:

public class JdbcTest5 {
    public static void main(String[] args) {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try {
            conn = DBUtils.connect();
            conn.setAutoCommit(false);
            String sql = "SELECT * FROM `login` WHERE l_id>3 FOR UPDATE";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()) {
                System.out.print(rs.getString("l_id") + "----" + rs.getString("l_nick"));
                System.out.println();
            }

            conn.commit();

        } catch (SQLException e) {
            if (conn != null) {
                try {
                    conn.rollback();
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
            e.printStackTrace();
        } finally {
            DBUtils.close(conn, ps, rs);
        }
    }
}
public class JdbcTest4 {
    public static void main(String[] args) {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try {
            conn = DBUtils.connect();
            conn.setAutoCommit(false);
            String sql = "update login set l_nick=? where l_id=?";
            ps = conn.prepareStatement(sql);
            ps.setString(1, "哈雷彗星");
            ps.setInt(2, 7);
            int c = ps.executeUpdate();
            System.out.println("改变条数" + c);
            conn.commit();
        } catch (SQLException e) {
            try {
                conn.rollback();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            DBUtils.close(conn, ps, rs);
        }
    }
}

在commit行加断点再执行JdbcTest4.java,程序会停止运行,直到断点执行后续操作,JdbcTest4的程序才会继续执行;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

y_w_x_k

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值