2012-01-18 9 views
0

NetBeansを使用してJavaでメソッドをデバッグしようとしています。なぜNetBeans Javaデバッガはこのコードに到達しませんか?

方法があることを:

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

方法の中央に向かって、あなたは、これはSQLを手動で実行されたときに、私が得るにもかかわらず、空のリストを返して、いくつかの理由list = session.createQuery(sql).list();

が表示されます40の結果。

しかし、奇妙な部分は、.list()が呼び出されると、ブロックfinallyにジャンプし、決して残りに達しないということです。だからテストのために、 'removeme'はWHAT???に等しくなければならないが、デバッガはそれをまだABCと報告する。

何がありますか?

+0

キャッチブロックを通過していませんか?確かに例外がスローされているように聞こえます... –

+1

これはひどい例外処理ですが、あなたは何が起こったのかを知っているはずですので、少なくともstacktraceを印刷してください! –

+0

@JonSkeet絶対に確実です。例外ブロックに他のコードがありました。あなたが見ているのはちょっとスリムな例です。 – cbmeeks

答えて

1

間違った方法を使用しています。 'createQuery'はHQL構文を期待しています。あなたのメソッドを 'createSQLQuery'に変更してください

+0

絶対にそれに釘付け。私はそれをキャッチしませんでした。私はそれをcreateSQLQueryに変更し、私が期待したように40を得ました。ありがとう! – cbmeeks

+0

@cbmeeks:それは何が起こっているのかを説明していません。あなたはそれを調査すべきです。私は例外がスローされていることを強く疑っています*あなたは間違ったバージョンのコードを何らかの形でデバッグしていました。 Java *はそのようなコードをスキップしません。 @JonSkeetの権利を –

+0

にしてください。私はデバッガが本当の原因だと思う。おそらくJavaの批判はあまりにも厳しいだろう。笑 – cbmeeks

関連する問題