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);
            }
        }
    }
     
     
     
  • 相关阅读:
    JS 利用数组拼接html字符串
    IE浏览器下读取客户端上传的文件大小
    PrintWriter out = response.getWriter() 输出中文乱码问题
    非常有用的Java程序片段
    sql之left join、right join、inner join的区别
    JAVA 数组常用技巧
    java 图片文件格式转换(多页tif转jpg 、jpg转tif)
    SQL Server 字段状态判断语句
    sql server 2008中id如何设为自增
    java基于xml配置的通用excel单表数据导入组件(五、Action处理类)
  • 原文地址:https://www.cnblogs.com/xlwu/p/13654103.html
Copyright © 2011-2022 走看看