2017-09-14 325 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块以获得特别的例外。