2012-03-23 108 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