반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- statement.executequery() cannot issue statements that do not produce result sets.
- springboottest
- java 11
- ssl이란?
- log error
- java 버전 변경
- LeetCode
- xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
- java
- springboot
- ssl프로토콜확인
- java 여러개 버전
- error
- 스프링부트테스트
- Medium
- OpenFeign
- tls프로토콜확인
- No tests found for given includes
- java 1.8 11
- java version
- xcrun: error: invalid active developer path
- Java 1.8
- JUnit
- yum install java
- mac os git error
- easy
- AWS CLI
- aws
- mysql executequery error
- parse
Archives
- Today
- Total
쩨이엠 개발 블로그
Mysql Error : Statement.executeQuery() cannot issue statements that do not produce result sets. 본문
개발/JAVA
Mysql Error : Statement.executeQuery() cannot issue statements that do not produce result sets.
쩨이엠 2024. 5. 21. 18:51728x90
반응형
1. 현상
JpaRepository에서 nativeQuery로 update 쿼리를 실행하던 중 에러가 났다
Error 내용
Caused by: java.sql.SQLException: Statement.executeQuery() cannot issue statements that do not produce result sets.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:928) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[HikariCP-5.0.1.jar:na]
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[HikariCP-5.0.1.jar:na]
at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:217) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
... 79 common frames omitted
2. 원인
이 statements는 result sets을 만들어야한다고 한다
Update를 하는데 굳이 result가 필요한가? 해서 void로 return을 받지 않고 있었는데 혹시 이게 문제인가 해서 int로 return을 받기로 해보았다
역시나 에러가 난다
그래서 찾아봄
쿼리마다 실행되는 메소드가 달랐다
쿼리 & 메소드
- SELECT
- executeQuery 사용
- Result set 반환
- UPDATE, INSERT, DELETE
- executeUpdate 사용
- 해당되는 레코드 갯수를 반환 (int)
3. 해결
executeQuery가 사용되었기 때문에 에러가 났다
그러므로 update에 맞는 쿼리를 사용하도록 두 개의 annotation을 붙여준다
@Modifying
executeUpdate를 사용하도록 하는 annotation
@Transactional
DB 관련 프로세스들을 묶어서 사용할 수 있도록 하는 annotation
public interface PurchasesRepository extends JpaRepository<Purchases, Long> {
@Modifying
@Transactional
@Query(value = """
UPDATE comm_purchases AS p
JOIN (
SELECT user_id, lid FROM users
) AS a ON a.lid = p.user_lid
SET p.user_id = a.user_id
WHERE p.user_id IS NULL
AND p.day >= ?1 AND p.day < ?2
""", nativeQuery = true)
void updateLinkPrice(String startDt, String endDt);
}
annotation 붙인 후 실행하면 잘 돌아가는 것을 확인 할 수 있다.
728x90
반응형
'개발 > JAVA' 카테고리의 다른 글
[Java] ObjectMapper Error - Java 8 date/time type `java.time.LocalDateTime` not supported by default (0) | 2023.07.05 |
---|---|
OpenFeign 적용기 ( spring boot 3.0.x ) (1) | 2023.06.13 |
[ Java ] 자바 정규식 (Regular expressions) (0) | 2021.01.19 |
[ TCP ] TCP Client 만들기 (3) | 2021.01.06 |
[ TCP ] TCP Server 만들기 (1) | 2021.01.05 |
Comments