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);
            }
        }
    }
     
     
     
  • 相关阅读:
    PHP面向对象(一)
    Linux(九)LNMP环境Nginx服务器
    Linux(八)Apache服务器
    [转]PHP高手干货分享:不能不看的50个细节!
    Linux(七)LAMP环境搭建
    Linux(六)Samba服务器与防火墙
    Linux(五)服务和进程管理
    Linux(四)用户和用户组管理
    Linux(三)安装包
    Linux(二)Linux常用命令
  • 原文地址:https://www.cnblogs.com/xlwu/p/13654103.html
Copyright © 2011-2022 走看看