2012-03-23 18 views
0

次のtry-catchブロックで 'インデックス0が範囲外です'例外が発生しますが、例外がスローされる場所を把握できません。インデックス0が範囲外です

try{   

     cs = this.con.prepareCall("{call "+storedProcName+"("+procParams+")}"); 

     for(int j = 0; j < params.length; j++){ 
      if (paramTypes[j].equalsIgnoreCase("Int")) { 
       int x = 0; 
       try{ 
        x = Integer.parseInt(params[j]); 
       } catch(Exception e) {} 
       cs.setInt(j, x); 
      } else if (paramTypes[j].equalsIgnoreCase("Boolean")) { 
       boolean x = false; 
       try{ 
        x = (params[j].equalsIgnoreCase("True")) || (params[j].equalsIgnoreCase("T")) || (params[j].equalsIgnoreCase("1")) || (params[j].equalsIgnoreCase("Yes")) || (params[j].equalsIgnoreCase("Y")); 
       } catch(Exception e) {} 
       cs.setBoolean(j, x); 
      } else if (paramTypes[j].equalsIgnoreCase("String")) { 
       cs.setString(j, params[j]); 
      } 
     } 

    }catch(Exception e){ 
     System.out.println("---------------------------------------------"); 
     System.out.println("Problem constructing callableStatement: "+e); 
     System.out.println("---------------------------------------------"); 
    } 

これを見て、正しい方向に私を指差してくれた皆様に感謝します。あなたがしようとしない場合は0

でだから、最初のパラメータはインデックス1を持つ1で

+3

StackTraceはどこにありますか? –

+0

実際にそのコードから例外がスローされたか、またはcs呼び出しの1つからスローされる可能性がありますか? (ローカルの例外ハンドラにはない) –

答えて

3

PreparedStatementパラメータインデックスは1から始まります - ので、あなたはおそらくちょうど

setString(j + 1, params[j]); 

など

1

最初のパラメータのインデックスは1である、ない0

3

PreparedStatement開始のパラメータのインデックス、 0をインデックスとして使用すると、それは有効なインデックスではないと不平を言うでしょう。

1

をしたいスタックトレースとの "トラブル" の行を見つけるために

System.out.println("Problem constructing callableStatement: "+e.getMessage); 

を使用するようにしてくださいコード。

0

} else if (paramTypes[j]

はそれがparams[ j ]ではないでしょうか?

+0

ああ、決して心配しないでください。おそらくそうではありません。しかし、2つの配列を維持し、両方の配列を横切るときに1つの配列のサイズに依存することは悪い習慣です。 –

関連する問題