에러 모음

TransientDataAccessResourceException

junani0v0 2024. 5. 8. 20:31

 

< 에러 메시지 >

SEVERE: 경로 [/11]의 컨텍스트 내의 서블릿 [pf]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [Request processing failed; nested exception is org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [INSERT INTO forum.board (board_type_seq, title, content, reg_dtm, reg_member_seq ) VALUES( '1', ?, ?, DATE_FORMAT(NOW() ,'%Y%m%d%H%i%s'), '73');]; Parameter index out of range (3 > number of parameters, which is 2).; nested exception is java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).]을(를) 발생시켰습니다.

java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).

 

TransientDataAccessResourceException :

일시적으로 데이터 액세스 리소스(예: 데이터베이스 연결)에 문제가 발생했음을 나타냄

 - 데이터 액세스 레이어에서 발생하므로, 데이터베이스와의 상호 작용과 관련된 코드를 검토하고 문제를 찾아 해결

< 원인 >

public int addBoard(HashMap<String, String> params) {
    String sql ="INSERT INTO forum.board "
            + "(board_type_seq, title, content, reg_dtm, reg_member_seq ) "
            + "VALUES( '1', ?, ?, DATE_FORMAT(NOW()  ,'%Y%m%d%H%i%s'), '73');";
    Object[] args = { params.get("title"), params.get("trumbowyg-demo"), params.get("reg_member_seq")};
    return update(sql, args);
}

reg_member_seq를 ? 에서 73으로 변경했는데 args배열에서 값을 가져오는 코드가 있어 발생

< 해결 >

public int addBoard(HashMap<String, String> params) {
    String sql ="INSERT INTO forum.board "
            + "(board_type_seq, title, content, reg_dtm, reg_member_seq ) "
            + "VALUES( '1', ?, ?, DATE_FORMAT(NOW()  ,'%Y%m%d%H%i%s'), '73');";
    Object[] args = { params.get("title"), params.get("trumbowyg-demo")};
    return update(sql, args);
}

args배열에서 reg_member_seq 값 제거

 

정상작동 확인