아메리카노가 그렇게 맛있답니다 여러분

java.sql.SQLException: Can not issue data manipulation statements with executeQuery().


SQL을 사용하다가 보게 된 오류이다.


UPDATE, INSERT, DELETE문을 사용할 때 executeUpdate()로 전송하지 않았을 경우에 발생한다.

UPDATE, INSERT, DELETE문이 리턴값을 갖지 않기 때문이다. 그래서 executeUpdate() 메서드의 리턴값은 쿼리를 전송해서 변화한 행의 갯수이다. 글 삭제나 변경같은 일반적인 경우에는 단 하나만 삭제되기 때문에 1이 반환될 것이고, 카테고리를 삭제한다면 가지고 있던 글들이 전부 삭제되어야 하기 때문에 리턴값이 조금 크게 나올 것이며, 의미없는 쿼리를 보낸다면 삭제할 일이 없을 것이기 때문에 0이 리턴될 것이다.


SELECT문을 사용할 때 executeQuery()로 전송하지 않았을 경우에 발생한다.

SELECT문은 * 또는 속성값을 명시받아 DB에서 검색하여 반환한다. 즉, 반환값이 있는 구문이다. 그러므로 ResultQuery()의 반환값인 쿼리의 결과를 ResultSet 변수에 받아 사용해야 한다. (혹은 사용할 일이 없더라도 executeQuery()를 써야 문제를 해결할 수 있다.)


원인을 읽어보면 의외로 해답은 간단하다. executeQuery() 대신 executeUpdate()로 쿼리를 전송하거나, executeUpdate() 대신 executeQuery()로 쿼리를 전송하면 된다.