executeQuery ()로 데이터 조작 명령문을 발행 할 수 없습니다.


97

MySQL에는 두 개의 테이블 tableAtableB. 두 가지 쿼리를 실행하려고합니다.

executeQuery(query1) 
executeQuery(query2)

하지만 다음과 같은 오류가 발생합니다.

can not issue data manipulation statements with executeQuery().

이것은 무엇을 의미 하는가?


JDBC-MySQL 관리자를 통하지 않고 MySQL에 대한 액세스 권한이 있습니까? 아니면 명령 줄?
OMG Ponies

mysql 관리자에 대한 액세스 권한이 있습니다. 그러나 requiement는 다음과 같습니다. mysql 데이터베이스는 mysql admin을 사용하여 생성, 수정, 업데이트 등을 수행하지만 그 후에는 모든 작업을 java로 수행해야합니다.
silverkid

JDBC를 사용하는 것보다 데이터베이스를 생성하기 위해 스크립트에 인덱스 생성을 포함하는 것이 좋습니다.
OMG Ponies

답변:


186

당신이 실제로 필요한 데이터를 조작하기 executeUpdate()보다는를 executeQuery().

다음 executeUpdate()은 이미 그 자체로 대답 인 javadoc 에서 발췌 한 것입니다.

INSERT, UPDATE 또는 DELETE 문이나 아무것도 반환하지 않는 SQL 문 (예 : SQL DDL 문) 일 수있는 지정된 SQL 문을 실행합니다.


34

DML 문을 실행할 때는 executeUpdate/ execute대신 / 를 사용해야합니다 executeQuery.

다음은 간단한 비교입니다.

executeQueryVSexecuteUpdateVSexecute


20

스프링 부트를 사용하는 경우 @Modifying 주석을 추가하기 만하면됩니다.

@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();

2
봄 부팅 저장소 @Transactional 의지 도움말에서 삭제 문
Abhishek Chudekar

1
codar.club/blogs/5cd7f06bec80a.html 은 수정, 트랜잭션 및 쿼리 주석의 사용법을 설명합니다. 다음을 사용하여 문제를 해결했습니다. @Modifying(clearAutomatically = true) @Transactional삭제 쿼리를 정의하는 @Query 주석 바로 위에
user666

16

사용 executeUpdate()문제 데이터 조작 문에. executeQuery()SELECT 쿼리 (즉, 결과 집합을 반환하는 쿼리)에만 해당됩니다.


12

쿼리 삭제의 경우-다음 @Modifying과 같이 사용 @Transactional하기 전에 @Query:-

@Repository
public interface CopyRepository extends JpaRepository<Copy, Integer> {

    @Modifying
    @Transactional
    @Query(value = "DELETE FROM tbl_copy where trade_id = ?1 ; ", nativeQuery = true)
    void deleteCopyByTradeId(Integer id);

}

java.sql.SQLException: Can not issue data manipulation statements with executeQuery()오류가 발생 하지 않습니다 .



4

이 코드는 나를 위해 작동합니다. INSERT로 값을 설정하고이 값의 LAST_INSERT_ID ()를 SELECT로 가져옵니다. Java NetBeans 8.1, MySql 및 java.JDBC.driver를 사용합니다.

                try {

        String Query = "INSERT INTO `stock`(`stock`, `min_stock`,   
                `id_stock`) VALUES ("

                + "\"" + p.get_Stock().getStock() + "\", "
                + "\"" + p.get_Stock().getStockMinimo() + "\","
                + "" + "null" + ")";

        Statement st = miConexion.createStatement();
        st.executeUpdate(Query);

        java.sql.ResultSet rs;
        rs = st.executeQuery("Select LAST_INSERT_ID() from stock limit 1");                
        rs.next(); //para posicionar el puntero en la primer fila
        ultimo_id = rs.getInt("LAST_INSERT_ID()");
        } catch (SqlException ex) { ex.printTrace;}

3

executeQuery()를 반환합니다 ResultSet. 저는 Java / MySQL에 익숙하지 않지만 인덱스를 생성하려면 executeUpdate().


2
그것은 기대하지 않습니다 ResultSet. 대신 반환ResultSet.
BalusC 2009

2
DB의 결과 세트가 내가 의미하는 바를 기대합니다.
Neil N

2
@Modifying
@Transactional
@Query(value = "delete from cart_item where cart_cart_id=:cart", nativeQuery = true)
public void deleteByCart(@Param("cart") int cart); 

@query 앞에 @Modifying 및 @Transnational을 추가하는 것을 잊지 마십시오. 그것은 나를 위해 작동합니다.

JPA와 함께 기본 쿼리를 사용하여 일부 조건이있는 레코드를 삭제하려면 위에서 언급 한 주석이 중요합니다.


-1

괄호 안의 executeUpdate () 외에도 SQL 문을 사용하려면 변수를 추가해야합니다.

예를 들면 :

PreparedStatement pst =  connection.prepareStatement(sql);
int numRowsChanged = pst.executeUpdate(sql);

여보세요! 참고로 Stack Overflow에 대한 질문과 답변은 영어로 작성해야합니다 (그렇지 않으면 삭제 및 / 또는 Google 번역의 위험이 있음). 건배! ( ! 안녕 코모 라스 cabezas 파라 아리바는 라스는 Y respuestas은 스택 오버플로 데베 걔 escrito EN 잉글 레스 (드 보라 contrario corren 엘 riesgo 드 eliminación Y / O를 구글 Traductor sobre) preguntas ¡ 건배.! )
크리스 Forrence
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.