2012-03-23 104 views
0

我得到一個「索引0超出範圍」下面的try-catch塊異常,但我不能爲我的生命找出其中異常被趕?指數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("---------------------------------------------"); 
    } 

感謝任何人看看這個,也許指着我在正確的方向!

+3

和堆棧跟蹤是哪裏? – 2012-03-23 07:17:34

+0

您是否知道該代碼拋出異常,或者是否可以從其中一個cs調用中拋出異常? (哪些不在當地的例外情況下) – 2012-03-23 07:19:23

回答

3

PreparedStatement的參數指標從1開始 - 所以你可能只是想

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

1

第一個參數的索引是1,而不是0

3

在1 PreparedStatement開始對參數的指標,而不是爲0

所以第一個參數指標1.如果你嘗試使用0作爲索引,它會抱怨說這不是一個有效的索引。

1

嘗試使用

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

找出堆棧跟蹤和的 「煩惱」 線碼。

0

} else if (paramTypes[j]

難道不該params[ j ]

+0

哦,沒關係。可能不會。但是,維護兩個數組並且在遍歷兩個數組時依賴其大小是不好的做法。 – 2012-03-23 07:21:52