오류발생과 해결

2번째 맞닥드린 오류 : could not prepare statement (DB 관련 오류)

지팡구 2022. 3. 11. 18:51

 

앞서 책을 통해 프로젝트를 진행중 JPA 파트에서 테스트 코드를 작성하다가 보면  분명히 오류가 발생할 것이다. 

오류가 발생하는 지점은 콘솔 쿼리 로그를 확인할 때, 설정하기 전에는 H2의 쿼리 문법이 적용되어 

id bigint generated by default as identity 라는 쿼리문을 확인할 수 있다.

 

이 쿼리를 MYSQL의 쿼리문으로 확인하기 위해서는 다음과 같은 코드를 application.properties에 설정을 해야 하는데,

 

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

이 쿼리문을 추가하게 되면 발생하는 오류가 윗 오류인데,

 

posts 테이블이 존재하지 않아 쿼리문을 넣을 수 없다고 생각했는데, 그럼 어떻게 만들어 줘야하지? 라는 생각이 들었고

해결 방법을 찾기가 힘들었고 그냥 기존에 사용한 mariaDB를 연결해서 사용할까 했지만 끝가지 찾아봤고 그 결과 책의 저자님의 블로그에서 확인할 수 있었다.

 

'일단 우선 spring boot 2.1.10 부터 MYSQL 문법 지정 방식에 변화가 있어 DB 설정의 변경이 필요하다고 한다'

 

그래서 우선 기존에 추가한 코드를 바꿔야 하는데 바꾸는 코드는 다음과 같다.

이 코드를

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

이 코드로 변경해야 하고 로컬환경으로 접속해 h2 웹 콘솔로 접속이 되는지 확인을 해야한다. 

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
spring.datasource.hikari.jdbc-url=jdbc:h2:mem:testdb;MODE=MYSQL
spring.datasource.hikari.username=sa

 

main 부분과 test 부분에 있는 파일(application.properties) 둘 다 수정을 해줘야 한다.

(직접 실행할 때와 테스트로 실행할 때 둘 다 사용되기 때문에)