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);
            }
        }
    }
     
     
     
  • 相关阅读:
    Maven安装
    Linux登录欢迎图案
    GC的性能指标和内存容量配置原则
    java堆结构和垃圾回收
    框架设计知识点纵览(笔记)
    .net core在Linux本地化Localization的一次填坑
    .Net Identity OAuth 2.0 SecurityStamp 使用
    CentOS 7 安装. Net Core SDK 2.0
    Docker基本命令与使用 —— Docker容器的网络连接(四)
    Docker基本命令与使用 —— Dockerfile指令与构建(三)
  • 原文地址:https://www.cnblogs.com/xlwu/p/13654103.html
Copyright © 2011-2022 走看看