当前位置:Gxlcms > 数据库问题 > Java 和 数据库两种方式进行加锁

Java 和 数据库两种方式进行加锁

时间:2021-07-01 10:21:17 帮助过:83人阅读

int generate(StringtableName){   Stringsql = "select value from t_table_id where table_name=?";   Connectionconn = null;   PreparedStatementpstmt = null;   ResultSetrs = null;   intvalue = 0;   try{     conn= DbUtil.getConnection();     pstmt= conn.prepareStatement(sql);     pstmt.setString(1,tableName);     rs= pstmt.executeQuery();     rs.next(); // if(!rs.next()){ // thrownew RuntimeException(); // }   value= rs.getInt("value");   value++;   modifyValueField(conn,tableName,value); }catch(Exceptione){   e.printStackTrace();   thrownew RuntimeException(); }finally{     DbUtil.close(rs);     DbUtil.close(pstmt);     DbUtil.close(conn); }   returnvalue; }

 

 

数据库的方式:

//采用悲观锁来实现同步  
//在sql语句后加 for update就加上了锁,在查询的时候进行加锁,在加锁后不能进行查询。提交时候后其他人才能查询。  
public static int generate(String tableName){  
        //使用数据库的悲观锁for update  
        String sql = "select value from t_table_id where table_name=? for update";  
        Connection conn = null;  
        PreparedStatement pstmt = null;  
        ResultSet rs = null;  
        int value = 0;  
        try{  
            conn = DbUtil.getConnection();  
            //设置自动提交为false  
            DbUtil.beginTransaction(conn);  
            pstmt = conn.prepareStatement(sql);  
            pstmt.setString(1, tableName);  
            rs = pstmt.executeQuery();  
            rs.next();  
//          if(!rs.next()){  
//              throw new RuntimeException();  
//          }  
            value = rs.getInt("value");  
            value++;  
            modifyValueField(conn,tableName,value);  
            //提交事务  
            DbUtil.commitTransaction(conn);  
        }catch(Exception e){  
            e.printStackTrace();  
            //回滚事务  
            DbUtil.rollbackTranscation(conn);  
            throw new RuntimeException();  
        }finally{  
            DbUtil.close(rs);  
            DbUtil.close(pstmt);  
            DbUtil.resetConnection(conn);  
            DbUtil.close(conn);  
        }  
        return value;  
    }  

 

Java 和 数据库两种方式进行加锁

标签:方式   intval   eset   nal   table   on()   final   sql语句   .com   

人气教程排行