본문 바로가기
기술 기록/java

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

by Fola 2022. 2. 19.
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;


    }
}

 

댓글