PreparedStatement.executeUpdate();가 동작하지 않을 때
- Java
- 2021. 6. 13.
결론은 '껐다 켜기'다.
JDBC를 통해 DB를 연동하면 자바를 통해 SQL 문을 수행할 수 있다. 이때 PreparedStatement 객체를 만들어 SQL 문을 저장한다. 만약 SQL문이 update
, delete
, insert
중 하나면 PreparedStatement의 executeUpdate();
메서드를 통해 SQL 문을 수행한다.
DAO 클래스에서 급여(SAL) 칼럼의 값을 주어진 인상률(%) 만큼 높여주는 SQL 문을 수행하려고 시도했으나 좀처럼 말을 듣지 않았다.
public void raiseSal(double rate) {
Connection con = GetConnection.getConnection();
PreparedStatement pstmt = null;
try {
pstmt = con.prepareStatement("update professor set sal = sal + (sal * ?)");
pstmt.setDouble(1, rate);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
컴파일 에러가 없고 별다른 문제도 없어보이는데 pstmt.executeUpdate();
문이 전혀 작동하지 않는 것이다. 특히나 런타임 에러도 나오지 않았다. 위 메서드는 service 클래스에서 콘솔창에 값을 입력받아 보내주는 과정을 거치는데, 콘솔창에 값을 입력하면 아무런 반응이 나타나지 않았다. 분명 try catch로 예외 발생시 알려주도록 했는데도 말이다.
pstmt.executeUpdate();
앞뒤로 System.out.print("test");
라는 출력문을 넣어 확인해봤다. 앞에서는 test를 정상적으로 출력하지만 뒤로는 출력하지 못했다. pstmt.executeUpdate();
에서 문제가 발생하는 게 분명했다. 도대체 왜? 한참을 찾아 해메다 나와 동일한 증상으로 okky에 글을 올린 작성자를 찾을 수 있었다. 참고: pstmt.executeUpdate();가 실행이 안되요.
여러 의견이 댓글에 달렸으나 뚜렷한 문제 해결법은 보이지 않았고 후에 작성자 스스로 해결했다며 댓글을 남겼다. 해결법은 너무나 허탈하면서도 간단했다. db에서 테이블을 삭제하고 다시 만들어보라는 것. SQL 디벨로퍼에서 해당 테이블을 삭제하고 다시 만든 뒤 데이터 insert
후 다시 작동했다. 그제서야 쿼리가 수행됐다.
결론적으로 코딩의 문제는 아닌 거 같고 DB 쪽에서 무언가 잘못된 거 같은데 그 원인은 모르겠다. 다시 한번 '껐다 켜기'는 위대함을 느꼈다.
'Java' 카테고리의 다른 글
메이븐(maven)을 쓰는 이유 - pom.xml (0) | 2021.07.10 |
---|---|
자바 서블릿(servlet) 메서드의 의미 (0) | 2021.07.06 |
[자바/JAVA] 예외(Exception) 처리에 대해, try ~ catch | throw (0) | 2021.05.30 |
[자바/JAVA] 변수(Variable)란 무엇인가, 용어를 중심으로 (0) | 2021.05.25 |
[자바/JAVA] 키-값으로 저장되는 HashMap (0) | 2021.05.22 |