2017-09-14 326 views
0

私人無效btnInsertActionPerformed(EVT java.awt.event.ActionEvent中){Java錯誤:可以多抓或幾個catch子句捕捉特定異常

if(checkInputs() && imgPath != null){ 
try { 
Connection con = getConnection(); 
PreparedStatement ps = con.prepareStatement("INSERT INTO animal_information(animal_breed,animal_age,animal_found,animal_hairColor," 
        + "animal_eyeColor,animal_specialTrait,animal_codeNumber,animal_image)" 
        + "values(?,?,?,?,?,?,?)"); 

//ps.setString(1, pawsId.getText()); 
ps.setString(1, pawsBreed.getText()); 
ps.setString(2, pawsAge.getText()); 

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
String addDate = dateFormat.format(pawsDate.getDate()); 
ps.setString(3, addDate); 
ps.setString(4, pawsHairColor.getText()); 
ps.setString(5, pawsEyeColor.getText()); 
ps.setString(6, pawsUniqueTrait.getText()); 

InputStream img = new FileInputStream(new File(imgPath)); 
ps.setBlob(7, img); 
ps.executeUpdate(); 

JOptionPane.showMessageDialog(null, "Inserted Data Successfully"); 
} catch (Exception ex) { 
JOptionPane.showMessageDialog(null, ex.getMessage()); 
} 
} 
else{ 
JOptionPane.showMessageDialog(null, "One or More Fields Are Empty"); 
} 
System.out.println("Breed => "+ pawsBreed.getText()); 
System.out.println("Age => "+ pawsAge.getText()); 
System.out.println("Hair Color => "+ pawsHairColor.getText()); 
System.out.println("Eye Color => "+ pawsEyeColor.getText()); 
System.out.println("Unique Traits => "+ pawsUniqueTrait.getText()); 
System.out.println("Image => "+ imgPath); 
} 

好傢伙更換!我只是一名學生,完全是初學者學習java。我遇到了這個問題「可以用多捕獲或幾個捕獲子句捕捉特定的異常」在部分catch(Exception ex)的圖像中它有黃色下劃線顏色,這就給我一個錯誤。我想插入數據到我的數據庫,但它沒有插入,因爲這個錯誤。正如你可以在我的代碼中看到的,我試圖打印數據,它都是成功的。有人可以請啓發和幫助我,我做錯了什麼。請...

+0

發佈文字;代碼是文本。不要讓人們看圖像。無論如何,立即捕捉所有異常通常被認爲是不好的做法。這不是一個錯誤,只是一個壞主意。 –

+0

你可以在帖子中添加代碼,而不是像img? – Bob

+0

對不起,關於圖片,我現在編輯它,代碼已發佈。 – missNobody

回答

0

黃線不是錯誤,而是警告或建議。

它的建議是你的catch (Exception e)過於寬泛:它將應用於更多類型的異常而不僅僅是可能拋出的異常。

有人可能會引入引發不同類型異常的新代碼,他們可能不希望您的catch來處理它。所以,最好的做法是隻處理可能的異常。

你應該做的是用catch (SQLException e)替換該行。通常,單擊伴隨警告的黃色圖標會讓您選擇讓編輯爲您做這件事。

我想從你的代碼有來自try子句僅一個檢查的異常拋出,這是SQLException,但如果有不止一個人不止一個,可以使用多catch來處理所有possiblities代碼相同:

try { 
    ... 
} 
catch (FooException | BarException e) { 
    ... handle both types of exception with the same code 
} 

,或者如果您需要以不同的方式來處理不同的異常,你可以有多個catch條款:

所有的
try { 
    ... 
} 
catch (FooException e) { 
    ... handle FooException one way 
} 
catch (BarException e) { 
    ... handle BarException differently 
} 
+0

非常感謝您的洞察力先生。 – missNobody

+0

如何禁止此警告? – saidfagan

+0

這取決於你的IDE。在NetBeans中,您可以轉至工具 - >選項 - >編輯器 - >提示 - > JDK遷移支持,在那裏您可以取消「使用特定的catch」 –

0

首先,黃線是不是一個錯誤。

異常類是父類的所有子的(子)的異常類其是IOException異常,ClassNotFoundException的VS的..

try{ 

... 

}catch(Exception e){ 

} 

此catch塊捕獲所有的子類的異常,包括IOException異常,ClassNotFoundException的VS的。例如如果你的try塊拋出一個SQLException,catch塊會捕獲這個異常。或者,如果您的try塊引發FileNotFoundException,則catch塊也會捕獲此異常。那就是你的catch塊不是專門用於特殊例外的。

try{ 

... 

}catch(FileNotFoundException e){ 

} 

至於這個catch塊只捕獲FileNotFoundException異常。

netbeans中的黃線解釋說您可以專門化您的catch塊以獲得特別的例外。