时间:2021-07-01 10:21:17 帮助过:83人阅读
数据库的方式:
//采用悲观锁来实现同步 //在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