2009-05-14 3 views
3

이 메서드 호출을 사용합니다. -> simpleJdbcTemplate.queryForInt (sql, null); -> spring의 queryForInt() 메소드 SimpleJdbcTemplate은 런타임 예외 인 DataAccessException을 발생시킵니다. 응용 프로그램의보기 계층에 예외를 적용하려고합니다. 스프링 프레임 작업 이후에 RuntimeExceptions 내에서 확인 된 예외를 래핑합니다. 여기에 붙어 있습니다.스프링 프레임 작업에서 RuntimeExceptions 내의 확인 된 예외를 랩합니다.

어떻게해야합니까?

설명 1 :

가 Spring 프레임 워크는 애플리케이션 개발자

에 의해 코딩되는 3, 6 세, 6 필요성을 제외한 모든 처리합니다 말을 framework- 부가가치 Spring 프레임 워크의 JDBC 추상화에 의해 제공 연결을 정의
  1. 이 준비 명령문을 지정하고 문을 실행
  2. 를 열고 연결
  3. 매개 변수

하지만 경우 연결을 닫습니다

  • 예외 각 반복
  • 프로세스에 대한
  • 핸들 거래 업무를 수행합니다 (있는 경우)를 결과를 반복하는 루프를 설정 개발자 레벨 에서 처리되지 않은 예외 상황은 다음과 같습니다. 프로그램이 시작된 특정 시간 이후 데이터베이스 연결이 끊어졌습니다. 위의 메서드에 대한 호출이 만들어지면 런타임 예외가 발생합니다. 예외를 처리하지 못했습니다. 사용자 인터페이스 (보기)에 알릴 수 없습니다.

    어떻게 해결할 수 있습니까?

  • +0

    나는 왜 당신이 갇혀 있는지, 무엇을하고 싶은지 잘 모르겠습니다. 질문을 분명히 해 주시겠습니까? –

    답변

    1

    확인한 예외 (RuntimeException 또는 Error의 하위 클래스가 아니거나 RuntimeException 또는 Error의 인스턴스가 아닌)의 throw 가능한 하위 클래스 또는 체크되지 않은 예외 (RuntimeException 또는 오류 또는 이러한 Throwable 하위 클래스의 하위 클래스) .

    일반적으로, 당신도 이런 식으로 뭔가있을 것이다 :이 경우

    try { 
    //... processing 
    } catch(Exception/RuntimeException e) { 
    // propagate the exception to the view in a meaningful manner 
    } 
    

    를 런타임 예외를 들어, 당신은 아무것도 할 필요가 없습니다 - 블록 런타임 예외를 잡을 것입니다.

    당신은 당신이 감싸 예외를 지원하는 자바의 버전을 사용하는 가정, 검사로 변환하려는 경우, 당신이 할 일은 다음과 같습니다

    try { 
    //...spring code 
    } catch(DataAccessException e) { 
    throw new Exception(e); 
    } 
    

    그런 다음이 처리 위 층 잡을 것 확인 된 예외로.

    +0

    고마워요. – Buddhi

    1

    보기에서 원래 예외 정보에 액세스하기를 원하십니까? 그렇다면 RuntimeException에 대해 getCause()를 호출하여 원인을 확인한 기본 Exception을 가져올 수 있어야합니다.그렇지 않으면 SimpleJdbcTemplate을 사용하는 메서드에 "throws"선언을 추가하고 DataAccessException을 catch 한 다음 랩 된 확인 된 예외를 다시 throw해야합니다.

    +0

    고마워요. – Buddhi

    7

    스프링이 런타임 예외를 throw했기 때문에 그것을 포착 할 수 없다는 것을 의미하지는 않습니다. 당신이 DataAccessExceptions을위한 특별한 무언가를하고 싶은 경우에, 당신은 확실히 그렇게 할 수 있습니다 : 당신이 Spring의 MVC 프레임 워크를 사용하는 경우가 ExceptionResolver 인터페이스에 찾고 가치가있을 수 있습니다

    try { 
        // query logic 
    } catch (DataAccessException ex) { 
        // handle the exception 
    } 
    

    . 이것은 응용 프로그램의 하위 레이어에 의해 던져지는 모든 잡히지 않은 예외를 처리하는 방법을 결정하기위한 메커니즘입니다. 그것은 던져진 예외를 기반으로 다른보기를 표시 할 마지막 기회를 제공합니다.

    +0

    덧글이 덧붙여졌습니다. 그래서이 답변을 다시 찾을 수 있습니다. – toolkit