강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

다시자바님의 프로필 이미지
다시자바

작성한 질문수

bad SQL grammar [select * from member where name = ?] 왜 에러가 나는지 모르겠네요 문법에 문제가 없는듯한데요;; 파라메터 name 값이 쿼리에 대입이 안되는건지?;;

작성

·

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”라는 예외가 발생하고 있습니다. 아래 몇 가지 확인해보실 수 있는 점들 안내드립니다:

  1. 테이블 이름 및 필드 이름 확인: SQL 쿼리에서 member 테이블과 name 필드가 실제 데이터베이스에 존재하는지 확인하세요.

  2. SQL 파라미터 값 확인: findByName 메소드에서 전달하는 파라미터 namenull인지 또는 기대하지 않는 값인지 확인하세요.

  3. RowMapper 구현 확인: memberRowMapper() 메소드가 올바르게 구현되어 있는지 확인하세요. 잘못 구현된 경우 예외가 발생할 수 있습니다.

  4. JDBC Template 사용법: 기본적으로 파라미터와 쿼리가 올바르게 매핑되고 있는지 확인합니다. jdbcTemplate.query(String sql, RowMapper<T> rowMapper, Object... args) 메소드를 사용할 때 파라미터가 올바른 순서로 전달되는지 확인하세요.

문제가 지속되면, 로그나 스택 트레이스를 좀 더 자세히 확인하고 각 단계에서 전달되는 값을 디버깅하여 어느 부분에서 문제가 발생하고 있는지 파악하는 것도 도움이 될 수 있습니다.

추가로 JdbcTemplate 사용에 관한 문서는 여기에서 확인하실 수 있습니다.

다시자바님의 프로필 이미지
다시자바

작성한 질문수

질문하기