Statement.executeQuery() cannot issue statements that do not produce result sets
프로젝트 진행중에 발생한 SQL Exception 이다. 원인을 빠르게 찾지 못해 고생했다.
SELECT 쿼리: .executeQuery() 사용
그외 (INSERT, DELECT 등)의 쿼리: .execute() 혹은 .executeUpdate() 사용
위 두개의 메서드를 혼동하여 사용할 경우 에러가 발생한다.
.executeQuery()
- ResultSet 을 리턴
.executeUpdate()
- int 값 리턴
- 영향받는 레코드의 수를 리턴한다
- CREATE / DROP 는 -1을 리턴
.execute() 는 boolean 값 리턴
- 쿼리 결과가 ResultSet 에 담길 수 있다면 true 아니라면 false 를 리턴
- SELECT 쿼리를 사용했어도 .execute()로는 true 값 외에 조회 내역을 받아 올 수 없으니 주의
- INSERT, DELECT, UPDATE 등의 쿼리는 false 를 리턴
- 굳이 리턴값을 변수에 담지 않아도 쿼리는 실행 된다.
다음은 진행중인 프로젝트의 코드 일부
package databaseClass.user;
import databaseClass.ConnDB;
import java.sql.*;
public class UserSignUpDAO extends ConnDB {
public boolean SignUpUser(String userID, String userPW) {
PreparedStatement signUpQuery = null;
boolean isSucceed = false;
try {
connDB();
// make query
signUpQuery = conn.prepareStatement("INSERT INTO user (user_id, user_pw)" +
"VALUES (?,?)");
signUpQuery.setString(1, userID);
signUpQuery.setString(2, userPW);
// -----> warning : '.executeQuery()' use for SELECT query. NOT INSERT or UPDATE query<-----
// -----> USE .execute() <-----
signUpQuery.execute();
isSucceed = true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (signUpQuery != null) {
try {
signUpQuery.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return isSucceed;
}
}
'기술 기록 > java' 카테고리의 다른 글
Spring Boot) get - 기본 작동 원리 (0) | 2022.03.23 |
---|---|
error) 톰캣, 서블릿) 자바 웹 개발시 서블릿 페이지를 찾지 못하는 에러(http 404) (0) | 2022.03.22 |
(Eng) error) java, MySQL) Exception : Statement.executeQuery() cannot issue statements that do not produce result sets (0) | 2022.03.16 |
자바) 백준 4948번: 베르트랑 공준 (0) | 2022.02.18 |
댓글