Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 유니온파인드
- Spring
- 완전탐색
- 코드트리
- 그리디
- BFS
- SWEA
- 부분수열의합2
- 다시보기
- 백준
- 완탐
- 코딩테스트실력진단
- 알고리즘
- 코딩테스트
- DP
- 그래프
- JUnit
- Java
- DFS
- 기본유형
- database
- 다익스트라
- 트러블슈팅
- 알고리즘기본개념
- JPA
- 싸피
- SSAFY
- 코테
- 자바
- Union Find
Archives
- Today
- Total
HwangHub
[트러블슈팅/JDBC] Statement.executeQuery() cannot issue statements that do not produce result sets. 본문
DEV-STUDY/Spring
[트러블슈팅/JDBC] Statement.executeQuery() cannot issue statements that do not produce result sets.
HwangJerry 2023. 11. 4. 21:37jdbc 프로젝트를 진행하다가 위와 같은 이슈를 마주했다.
문제
원인을 알아보니 문제의 코드는 아래 부분이였다.
Statement stmt = conn.createStatement();
for (String ssn : ssnList) {
sb = new StringBuilder();
String sql = sb.append(baseDeleteClause).append("ssn = ").append(ssn).append(";").toString();
stmt.executeQuery(sql);
}
위 코드 중 .executeQuery()메서드가 문제다. 한번 이번 기회에 살짝 알아보자.
알아야 할 것
jdbc에서 지원하는 실행 메서드는 execute() , executeQuery() , executeUpdate() 등이 대표적이다. 이 메서드들은 중요한 핵심 구별점이 있다.
- executeQuery() : return 값으로 ResultSet을 반환한다. 즉, select 문은 이 메서드를 통해 수행해야 그 결과를 바로 받아낼 수 있다.
- executeUpdate() : return 값으로 반영된 튜플의 개수를 반환한다. update, insert, delete 쿼리를 수행할 때 사용되며, update를 할 때 n개의 튜플에 대하여 수정이 반영되었으면 n이 반환되고, delete나 insert는 일반적으로 1이 반환될 것이다.
- execute() : return 값으로 작업이 정상 처리되었는지 여부를 true / false인 boolean 으로 반환해준다.
포인트
중요한 점은, 수행하려는 SQL command에 따라 사용할 수 있는 메서드가 다르다는 것이다.
- select 쿼리 : executeQuery() 또는 execute() 로 수행할 수 있다.
- update, insert, delete 쿼리 : executeUpdate() 또는 execute() 로 수행할 수 있다.
결론
구분되는 현상은 실제 SQL을 실행시켜본 사람이라면 DBMS 반환값을 떠올렸을 때 이해가 쉬울 것이다. JDBC도 그냥 DBMS에 맞게 설계된 것 뿐이므로 이러한 현상이 발생하는 것이다. (여기서, execute()는 공통적으로 사용할 수 있지만, 용도에 맞게 잘 사용해야 할 것이다.)
단순하지만 좋은 경험을 했다.
'DEV-STUDY > Spring' 카테고리의 다른 글
[트러블슈팅] InvalidDataAccessResourceUsageException : expected "identifier"; (0) | 2023.11.06 |
---|---|
[JDBC] batch query를 작성해보며 고민해본 '좋은 코드' (0) | 2023.11.04 |
dto 역직렬화에는 기본생성자 + 자바 리플렉션 사용 (0) | 2023.10.13 |
[JPA] @Column(length = value), @Size, @Length 간단요약 (0) | 2023.10.13 |
[Spring] 필드 인젝션을 피해야 하는 이유 (1) | 2023.09.30 |
Comments