2017-09-14 2 views
0

private void btnInsertActionPerformed (java.awt.event.ActionEvent EVT) {JAVA ERREUR: peut être remplacé par plusieurs prises accidentelles ou plusieurs clauses de capture attrapant exceptions spécifiques

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); 
} 

Bonjour les gars! Je suis juste un étudiant et totalement débutant en apprentissage Java. J'ai rencontré ce problème "peut être remplacé par multi-catch ou plusieurs clauses catch attraper des exceptions spécifiques" dans l'image à la partie catch (Exception ex) il a une couleur de soulignement jaune et c'est ce qui me donne une erreur. Je veux insérer des données dans ma base de données mais il ne s'insère pas à cause de cette erreur. Comme vous pouvez le voir dans mon code, j'ai essayé d'imprimer les données et tout a réussi. Quelqu'un peut-il m'éclairer et m'aider? Qu'ai-je fait de mal? veuillez ...

+0

Texte du message; le code est du texte. Ne faites pas aller les gens à regarder des images. Dans tous les cas, attraper toutes les exceptions à la fois est généralement considéré comme une mauvaise pratique. Ce n'est pas une erreur, juste une mauvaise idée. –

+0

Pourriez-vous ajouter le code dans la publication et ne pas img? – Bob

+0

Désolé pour l'image, je l'ai édité maintenant et le code a été posté. – missNobody

Répondre

0

La ligne jaune n'est pas une erreur, mais un avertissement ou une suggestion. Ce que cela suggère, c'est que votre catch (Exception e) est trop large: cela s'appliquerait à beaucoup plus d'exceptions que celles qui pourraient être lancées.

Quelqu'un peut introduire un nouveau code qui déclenche un type différent d'exception, et il ne s'attend pas à ce que votre catch le gère. La meilleure pratique consiste donc à gérer uniquement les exceptions possibles. Vous devez remplacer cette ligne par catch (SQLException e). Souvent, en cliquant sur l'icône jaune qui accompagne l'avertissement, vous pouvez demander à l'éditeur de le faire pour vous.

Je pense de votre code, il n'y a qu'une seule exception vérifiée throwable de la clause try, qu'être SQLException, mais s'il y avait plus d'un, vous pouvez utiliser les prises accessoires multiples pour gérer toutes les possiblités avec le même code:

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

ou vous pourriez avoir plusieurs clauses catch si vous devez gérer différentes exceptions de différentes façons:

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

Merci beaucoup pour la perspicacité monsieur. – missNobody

+0

Comment puis-je supprimer cet avertissement? – saidfagan

+0

Cela dépend de votre IDE. Dans NetBeans, vous pouvez aller dans Outils -> Options -> Éditeur -> Conseils -> Prise en charge de la migration JDK, et là vous pouvez décocher "Utiliser une capture spécifique" –

0

tout d'abord, la ligne jaune est pas une erreur.

classe d'exception est la classe mère de tous sous (enfant) classes d'exception qui sont IOException, ClassNotFoundException vs ..

try{ 

... 

}catch(Exception e){ 

} 

Ce captures de bloc de capture toutes les sous-classes exceptions dont IOException, ClassNotFoundException vs .. Par exemple Si votre bloc try lève une exception SQLException, catch block attrape cette exception. Ou si votre bloc try renvoie une exception FileNotFoundException, catch block interceptera également cette exception. C'est votre bloc catch n'est pas spécialisé pour des exceptions spécifiques. En ce qui concerne ce bloc catch, seules les exceptions FileNotFoundException sont interceptées.

La ligne jaune dans netbeans explique que vous pouvez spécialiser votre bloc catch pour une exception spécifique.