JAVA ERROR:可以用多catch或几个catch子句替换特定的异常

时间:2017-09-14 12:48:05

标签: java netbeans

private void btnInsertActionPerformed(java.awt.event.ActionEvent evt){

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)中它有黄色下划线颜色,这给了我一个错误。我想将数据插入到我的数据库中,但由于此错误,它不会插入。正如你在我的代码中看到的那样,我已经尝试打印出数据并且它都是成功的。有人可以启发并帮助我做错了什么。请...

2 个答案:

答案 0 :(得分:0)

黄线不是错误,而是警告或建议。

它的建议是你的catch (Exception e)过于宽泛:它适用于更多类型的异常,而不仅仅是那些可能被抛出的异常。

有人可能会引入引发不同类型异常的新代码,但他们可能不希望您的catch处理它。因此,最佳做法是仅处理可能的异常。

您应该做的是用catch (SQLException e)替换该行。通常,单击警告旁边的黄色图标将为您提供让编辑器为您执行此操作的选项。

我认为从你的代码中只有一个来自try子句的可检查异常,即SQLException,但是如果有多个,你可以使用multi-catch来处理所有可能性使用相同的代码:

 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
 }

答案 1 :(得分:0)

首先,黄线不是错误。

异常类是所有子(子)异常类的父类,它们是IOException,ClassNotFoundException vs ..

PS C:\Users\user\Desktop>.\check.ps1
System.Collections.Hashtable

Key   : PSVersion
Value : 5.1.14409.1005
Name  : PSVersion

Key   : PSEdition
Value : Desktop
Name  : PSEdition

Key   : PSCompatibleVersions
Value : {1.0, 2.0, 3.0, 4.0...}
Name  : PSCompatibleVersions
[...]

此catch块捕获所有子类异常,包括IOException,ClassNotFoundException vs ..例如,如果try块抛出SQLException,catch块将捕获此异常。或者,如果您的try块抛出FileNotFoundException,catch块也将捕获此异常。那就是你的catch块不适用于特殊例外。

try{

...

}catch(Exception e){

}

至于这个catch块只捕获FileNotFoundException异常。

netbeans中的黄线说明你可以专门设置你的catch块以进行特殊例外。