기술 기록/java

error) 자바, MySQL) 예외 : Statement.executeQuery() cannot issue statements that do not produce result sets

Fola 2022. 2. 19. 13:52
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;


    }
}