2012-01-18 2 views
0

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?

+0

Etes-vous sûr que ça ne passe pas par le bloc catch? Cela ressemble certainement à une exception est levée ... –

+1

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! –

+0

@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

Répondre

1

Vous utilisez la mauvaise méthode. 'createQuery' attend une syntaxe HQL. Changez votre méthode pour 'createSQLQuery'

+0

Absolument cloué. Je n'ai pas compris ça. Je l'ai changé pour créer MySQLQuery et j'ai obtenu le 40 comme je m'y attendais. Merci! – cbmeeks

+0

@cbmeeks: Mets ça n'explique pas ce qui se passait ... et tu devrais enquêter là-dessus. Je suspecte fortement qu'une exception * soit * lancée ou que vous déboguez la mauvaise version du code, d'une manière ou d'une autre. Java * ne fait pas que passer le code comme ça. –

+0

@JonSkeet à droite. Je pense que le débogueur était le vrai coupable ici. Blâmer Java était probablement un peu trop dur. lol – cbmeeks

Questions connexes