MySQL에는 두 개의 테이블 tableA
과 tableB
. 두 가지 쿼리를 실행하려고합니다.
executeQuery(query1)
executeQuery(query2)
하지만 다음과 같은 오류가 발생합니다.
can not issue data manipulation statements with executeQuery().
이것은 무엇을 의미 하는가?
MySQL에는 두 개의 테이블 tableA
과 tableB
. 두 가지 쿼리를 실행하려고합니다.
executeQuery(query1)
executeQuery(query2)
하지만 다음과 같은 오류가 발생합니다.
can not issue data manipulation statements with executeQuery().
이것은 무엇을 의미 하는가?
답변:
당신이 실제로 필요한 데이터를 조작하기 executeUpdate()
보다는를 executeQuery()
.
다음 executeUpdate()
은 이미 그 자체로 대답 인 javadoc 에서 발췌 한 것입니다.
INSERT, UPDATE 또는 DELETE 문이나 아무것도 반환하지 않는 SQL 문 (예 : SQL DDL 문) 일 수있는 지정된 SQL 문을 실행합니다.
스프링 부트를 사용하는 경우 @Modifying 주석을 추가하기 만하면됩니다.
@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();
@Modifying(clearAutomatically = true) @Transactional
삭제 쿼리를 정의하는 @Query 주석 바로 위에
쿼리 삭제의 경우-다음 @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;}
executeQuery()
를 반환합니다 ResultSet
. 저는 Java / MySQL에 익숙하지 않지만 인덱스를 생성하려면 executeUpdate()
.
ResultSet
. 대신 반환 을 ResultSet
.
@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와 함께 기본 쿼리를 사용하여 일부 조건이있는 레코드를 삭제하려면 위에서 언급 한 주석이 중요합니다.
괄호 안의 executeUpdate () 외에도 SQL 문을 사용하려면 변수를 추가해야합니다.
예를 들면 :
PreparedStatement pst = connection.prepareStatement(sql);
int numRowsChanged = pst.executeUpdate(sql);