zoukankan      html  css  js  c++  java
  • 悲观锁(行级锁 for update)和乐观锁机制

     
    悲观锁案例:
    package com.java.JDBC;
    
    
    import util.DBUtil;
    
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    
    /**
    * 这个程序开启一个事务,这个四五专门进行查询,并且使用行级锁/悲观锁,锁住相关的记录。
    */
    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 = ?";
                ps = conn.prepareStatement(sql);
                ps.setString(1,"MANAGER");
                
                rs = ps.executeQuery();
                while (rs.next()){
                    String ename = rs.getString("ename");
                    String job = rs.getString("job");
                    Double sal = rs.getDouble("sal");
                    System.out.println(ename + " " + job + " " + sal);
                }
                // 提交事务
                conn.commit();
            } catch (SQLException e) {
                if (conn != null){
                    try {
                        // 回滚事务(事务结束)
                        conn.rollback();
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
                }
                e.printStackTrace();
            } finally {
                // 释放资源
                DBUtil.close(conn,ps,rs);
            }
        }
    }
    package com.java.JDBC;
    
    
    import util.DBUtil;
    
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    
    /**
    * 这个程序负责修改被锁定的记录
    */
    public class JDBCTest14 {
        public static void main(String[] args) {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
        
            try {
                // 获取连接
                conn = DBUtil.getConnection();
                // 开启事务
                conn.setAutoCommit(false);
                String sql = "update emp set sal = sal * 1.1 where job = ? for update";
                ps = conn.prepareStatement(sql);
                ps.setString(1,"MANAGER");
                
                int count = ps.executeUpdate();
                System.out.println(count);
                
                // 提交事务
                conn.commit();
            } catch (SQLException e) {
                if (conn != null) {
                    try {
                        // 回滚事务
                        conn.rollback();
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
                }
                e.printStackTrace();
            } finally {
                // 释放资源
                DBUtil.close(conn,ps,null);
            }
        }
    }
     
     
     
  • 相关阅读:
    [LeetCode] Rotate Image
    [置顶] (奇迹冬瓜)坦克大战[MFC框架]
    spinner自定义,效果如腾讯QQ账号选择时候的下拉列表
    sqlmap dvwa SQL Injection使用小记
    Activex打包于发布完整版---微软证书制作
    假设web应用的文档根目录为MyApp,那么可以从哪里找到database.jar文件。
    无状态会话Bean、有状态会话Bean、CMP与BMP中,哪一种Bean不需要自己书写连接数据库的代码?
    EJB的优点有哪些?(选择2项)
    对触发器的认识;
    消耗资源的SQL的定位方法;
  • 原文地址:https://www.cnblogs.com/xlwu/p/13654103.html
Copyright © 2011-2022 走看看