首页 > 代码库 > Java 和 数据库两种方式进行加锁
Java 和 数据库两种方式进行加锁
java方式:
publicstatic synchronized 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= http://www.mamicode.com/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 = http://www.mamicode.com/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 = http://www.mamicode.com/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 和 数据库两种方式进行加锁
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。