2009-03-24 6 views
2

NetBeans에서이 메서드에서 SQLException을 throw해야한다는 오류가 발생합니다.Java - 예외를 throw해야하지만 어떻게해야합니까?

private void displayCustomerInfo(java.awt.event.ActionEvent evt)          
{           
    int custID = Integer.parseInt(customerID.getText()); 
    String info = getCustomerInfo(custID); 
    results.setText(info); 
} 

이 메서드는 NetBeans에서 만들어 지므로 서명을 편집하고 예외를 throw 할 수 없습니다. 그래서 getCustomerInfo() 메서드를 만들었습니다. 이 메서드는 고객에 대한 데이터베이스에서 정보를 검색하는 메서드를 사용하므로 예외가 throw됩니다.

public String getCustomerInfo(int cid) throws SQLException 
{ 
    Customer c = proc.getCustomer(cid); 
    // get info 
    return "info"; 
} 

getCustomer 메소드도 예외를 발생시키고 proc.java는 컴파일됩니다.

정확한 오류는

unreported exception java.sql.SQLException; must be caught or declared to be thrown 
입니다.
+0

는 용서하지만, 왜 모든 사람들이 이야기 * 단지 *에 대한 시도 - 캐치 여기에? 그것은 옵션이지만, 유일한 옵션은 아닙니다. 예외가 던져 질 수없는 이유는 무엇입니까? 왜 netbeans가 허용하지 않습니까? Netbeans (이클립스 사용)을 사용하지 않지만 IDE가 생성 된 코드를 변경할 수 없다는 것은 바보 같은 소리입니다. – Nivas

답변

8

오류 메시지가 다시 읽습니다.

throw 할 때 예외를 선언하거나 (수행 할 수없는 경우) 예외를 catch해야합니다. 두 번째 선택을 시도하십시오.

2

당신이 던지라고 말하지는 않습니다. 네가 그걸 잡을 수 있다고한다. 따라서 try/catch 블록을 사용하여 처리하십시오. 예외를 처리하기위한

private void displayCustomerInfo(java.awt.event.ActionEvent evt)          
{           
    int custID = Integer.parseInt(customerID.getText()); 
    try { 
     String info = getCustomerInfo(custID); 
    } catch (SQLException sqle) { 
     // Do something with the exception 
    } 

    results.setText(info); 
} 

몇 좋은 옵션이 될 수 있습니다 :

try { 
    ... 
} 
catch (SQLException e) { 
    System.out.println("Exception happened! Abort! Abort!"); 
    e.printMessage(); //Not sure if this is the correct method name 
} 
3

당신과 같이, getCustomerInfo()에 전화 주위에 try/catch 블록을 둘 필요가 예외를 로그인하고 세부 사항은 사용 그것을 얻거나 신호로 사용하여 연결 요청을 다시 시도하십시오. 또는 Outlaw Programmer가 보여 주듯이, Exception을 검사 할 필요가없는 RuntimeException으로 다시 throw 할 수 있습니다.

9

일반적으로 코드에서 서명이 지원하지 않는 Exception 유형을 던져야하고 인터페이스를 제어 할 수없는 경우 인터페이스가 지원하는 유형을 catch하고 다시 게시 할 수 있습니다.

private void displayCustomerInfo(java.awt.event.ActionEven evt)          
{   
    try 
    {         
     int custID = Integer.parseInt(customerID.getText()); 
     String info = getCustomerInfo(custID); 
     results.setText(info); 
    } 
    catch (SQLException ex) 
    { 
     throw new RuntimeException(ex); // maybe create a new exception type? 
    } 
} 

당신은 거의 확실히의 RuntimeException을 확장하는 새 예외 형식을 만들려면, 당신의 클라이언트 코드 캐치 예외를 가지고 : 당신의 인터페이스는 어떠한 예외를 확인 선언하지 않는 경우, 당신은 항상 RuntimeException을 던질 수 있습니다. 그렇지 않으면 클라이언트 코드가 처리 할 수없는 NullPointerException, ArrayIndexOutOfBoundsException 등을 포함하여 RuntimeException을 잡을 위험이 있습니다.

+0

문제를 해결하는 정답을 가지고 +1 해드립니다. 그리고 OP가해야 할 일이 될 수도 있지만, RuntimeExceptions의 숨김이 일반적으로 나쁜 습관으로 간주된다는 언급을 할 수 있습니까? : D – rmeador

+0

일부 사람들은 나쁜 습관으로 생각합니다. 검사 된 예외 (Java 언어에서는 절대로 존재하지 않아야 함)를 가져와 검사되지 않은 예외로 래핑하는 것이 좋은 방법입니다. Hibernate는 모든 경우에 이것을 수행한다. – jsight

+0

나는 문제를보다 명확하게 설명하기 위해 답을 편집했습니다. RuntimeExceptions에 문제가 없지만 클라이언트가 적어도 호출이 실패한 이유를 알 수 있도록 새로운 유형을 만드는 것이 가치가 있다고 생각합니다. –

1

생성 된 NetBeans 구성 요소에는 수정 불가능한 코드가 있으며 GUI 빌더의 일부로 생성 된 것 같습니다. 나는 이것이 사실이냐고 묻습니다. 그러나 나는 아직 논평 할 수 없습니다. GUI 편집기에서 생성 된 객체를 선택하면 오른쪽의 코드 "회색"영역을 수정하는 데 사용할 수있는 "코드"탭이 있습니다.

여기

:
Code tab that is used to modify generated code.

관련 문제