작성
·
145
·
수정됨
0
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select * from member where name = ?]
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:103)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107)
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1548)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:677)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:723)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:754)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:767)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:825)
at azul.hello.Repository.JdbcTemplateMemberRepository.findByName(JdbcTemplateMemberRepository.java:44)
at azul.hello.service.MemberService.checkDuplicateName(MemberService.java:37)
at azul.hello.service.MemberService.join(MemberService.java:31)
at azul.hello.service.MemberServiceIntTest.join(MemberServiceIntTest.java:29)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
=========================================
코드 부분
@Override
public Optional<Member> findByName(String name) {
List<Member> result = jdbcTemplate.query("select * from member where name = ?", memberRowMapper(), name);
System.out.println("sql = "+ result.stream().findAny());
return result.stream().findAny();
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
다시자바님이 말씀하신 문제는 SQL 쿼리를 실행할 때 발생하는 문제로 보입니다. 에러 메시지에 따르면 “bad SQL grammar”라는 예외가 발생하고 있습니다. 아래 몇 가지 확인해보실 수 있는 점들 안내드립니다:
테이블 이름 및 필드 이름 확인: SQL 쿼리에서 member
테이블과 name
필드가 실제 데이터베이스에 존재하는지 확인하세요.
SQL 파라미터 값 확인: findByName
메소드에서 전달하는 파라미터 name
이 null
인지 또는 기대하지 않는 값인지 확인하세요.
RowMapper 구현 확인: memberRowMapper()
메소드가 올바르게 구현되어 있는지 확인하세요. 잘못 구현된 경우 예외가 발생할 수 있습니다.
JDBC Template 사용법: 기본적으로 파라미터와 쿼리가 올바르게 매핑되고 있는지 확인합니다. jdbcTemplate.query(String sql, RowMapper<T> rowMapper, Object... args)
메소드를 사용할 때 파라미터가 올바른 순서로 전달되는지 확인하세요.
문제가 지속되면, 로그나 스택 트레이스를 좀 더 자세히 확인하고 각 단계에서 전달되는 값을 디버깅하여 어느 부분에서 문제가 발생하고 있는지 파악하는 것도 도움이 될 수 있습니다.
추가로 JdbcTemplate
사용에 관한 문서는 여기에서 확인하실 수 있습니다.