package hamaster.gradesign.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Map; public class IDRequestDAOHibernateAndMySQLImpl extends IDRequestDAOHibernateImpl { public IDRequestDAOHibernateAndMySQLImpl() { } /** * 在MySQL下更新处理结果的实现 * @see hamaster.gradesign.dao.impl.IDRequestDAOHibernateImpl#requestHandledDBMSSpecImpl(java.sql.Connection, java.util.Map) */ @Override protected void requestHandledDBMSSpecImpl(Connection conn, Map<String, Integer> results) throws SQLException { String sql = "UPDATE IBE_ID_REQUEST SET PASSWORD=SHA1(PASSWORD), APPLICATION_STATUS=? WHERE IDENTITY_STRING=? AND APPLICATION_STATUS<2"; boolean orig = conn.getAutoCommit(); conn.setAutoCommit(false); // 更新处理结果的过程中加锁 // 防止其它线程脏读、不可重复读、幻读 conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); PreparedStatement pstmt = conn.prepareStatement(sql); for (String user : results.keySet()) { int status = results.get(user); pstmt.setInt(1, status); pstmt.setString(2, user); pstmt.addBatch(); } pstmt.executeBatch(); conn.commit(); conn.setAutoCommit(orig); conn.close(); } }