내가 연결 풀링 (http://www.mchange.com/projects/c3p0/)를위한 ComboPooledDataSource와 JDBC를 사용하는 Java의 RESTful API를 가지고 있고, 필드 증가하여 행을 업데이트하는 PreparedStatement의 :JDBC : 안전의 행이 갱신 된 경우 여러 요청
public void update(int messageId) {
String UPDATE_STM = "UPDATE table SET count_field = count_field +1 WHERE id=?";
conn = ConnectionManager.getConnection();
PreparedStatement stm = conn.prepareStatement(UPDATE_STM);
stm.setInt(1, messageId);
stm.executeUpdate();
}
(I를 try/catch를 생략하고 ConnectionManager.getConnection()은 풀에서 사용 가능한 연결 중 하나를 제공합니다. RESTful 서비스가 update() 메소드에 대한 요청을 두 개 이상 동시에받는 경우 개수가 올바르게 업데이트되었음을 인정합니까? 그렇지 않은 경우 잘못 계산되지 않도록 코드를 어떻게 수정해야합니까?
이 클래스를 싱글 톤으로 만들고 메서드 선언에 syncronized를 추가합니다. 하지만 증분 값을위한 최상의 솔루션은 시퀀스와 같은 도구에서 데이터베이스 빌드를 사용합니다. –