java 서블릿 응용 프로그램이 있으며 준비된 쿼리를 사용하여 SQL Server 데이터베이스 테이블의 레코드를 업데이트하고 있습니다.PreparedStatements를 사용할 때 SQL Server 교착 상태가 발생했습니다.
UPDATE MyTable SET name = 'test' WHERE id = '10'
을 실행하려고합니다. 내가 2 사용자를 시뮬레이션하기 위해 JMeter를 스크립트를 실행하는 동안,이 사항이 교착 상태에 원인이 있음을 발견
PreparedStatement pstmt = con.prepareStatement("UPDATE MyTable SET name = ? WHERE id = ?");
pstmt.setString(1, getName());
pstmt.setString(2, getID());
pstmt.executeUpdate();
:
내가이 일어날 수 있도록 다음 코드를 사용 (예, ID는 VARCHAR입니다) 내 데이터베이스.
SQL 프로파일 러에 내 값이 무엇인지 확인하고 다음 코드를 사용하여 값을 확인할 수있었습니다.
String query = String.format("UPDATE MyTable SET name = '%s' WHERE id = '%s' ", getName(), getID());
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.executeUpdate();
갑자기 내 교착 상태가 사라졌습니다. 마지막 접근 방식이 SQL 인젝션에 취약하다는 것은 수치 스럽습니다.
나에게 어떤 일이 일어나고 있는지, 그리고/또는 어떻게 고칠 수 있는지 말해 줄 수있는 사람이 있습니까?
교착 상태가 정확히 무엇입니까? 교착 상태라고 어떻게 판단 했습니까? – DavidG
트랜잭션이 교착 상태 였다는 SQLException이 발생했습니다. – HansElsen
교착 상태가 사라진 것은이 변경 사항 이었습니까? 나는 위와 같이 게시 한 SQL을 실행하면 교착 상태가 발생할 수있는 방법이 없음을 확신합니다. – DavidG