J'essaie de déboguer une méthode en Java en utilisant NetBeans.Pourquoi le débogueur NetBeans Java n'atteint-il jamais ce code?
Cette méthode est:
public Integer getNumberOfClamps(Locations paLocation) {
Integer ret = -1;
List list = new ArrayList();
String removeme = "ABC";
if (paLocation == null) {
return ret;
}
try {
IO io = new IO(this.getSchemaName());
Session session = io.getSession();
String sql = "select count(*) from assets a join assettypes at on (at.id = a.assettype_id) ";
sql += "where a.currentlocation_id = " + paLocation.getId() + " and at.clamp = 1 and at.active = 1;";
list = session.createQuery(sql).list();
// for some reason, list is empty yet MySQL reports 40 records
// and the following two lines are never reached!
ret = list.size();
removeme = "WHAT???";
} catch (Exception ex) {
ret = -1; // explicitly set return
} finally {
return ret;
}
}
Vers le milieu de la méthode que vous verrez list = session.createQuery(sql).list();
Pour une raison quelconque, cela retourne une liste vide, même si lorsque le SQL est exécuté manuellement, je reçois 40 résultats
Mais la partie impaire est qu'une fois que le .list()
est appelé, il saute au bloc finally
et n'atteint jamais le reste! Donc, pour le test, 'removeme' devrait être égal à WHAT???
mais le débogueur le signale comme étant toujours ABC
.
Ce qui donne?
Etes-vous sûr que ça ne passe pas par le bloc catch? Cela ressemble certainement à une exception est levée ... –
c'est la gestion des exceptions terrible, vous mangez toute exception alors comment êtes-vous censé savoir ce qui s'est passé, au moins imprimer le stacktrace! –
@JonSkeet absolument sûr. J'avais un autre code dans le bloc d'exception. Ce que vous voyez est juste un exemple réduit. – cbmeeks