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

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

executeQuery(query1)
executeQuery(query2)

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

can not issue data manipulation statements with executeQuery().

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



답변

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

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

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


답변

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

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

executeQueryVSexecuteUpdateVSexecute


답변

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

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


답변

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


답변

쿼리 삭제의 경우-다음 @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()오류가 발생 하지 않습니다 .


답변

그게 뭐야 executeUpdate 목적입니다.

다음은 차이점에 대한 간략한 요약입니다. http://www.coderanch.com/t/301594/JDBC/java/Difference-between-execute-executeQuery-executeUpdate


답변

이 코드는 나를 위해 작동합니다. 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;}