索引0超出范围

时间:2012-03-23 07:15:18

标签: java exception indexing

我在下面的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("---------------------------------------------");
    }

感谢有人看过这个,并指出我正确的方向!

5 个答案:

答案 0 :(得分:3)

PreparedStatement中参数的索引从1开始,而不是从0开始。

所以第一个参数有索引1.如果你尝试使用0作为索引,它会抱怨这不是一个有效的索引。

答案 1 :(得分:3)

PreparedStatement参数索引从1开始 - 所以你可能只想要

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

答案 2 :(得分:1)

第一个参数的索引是1,而不是0

答案 3 :(得分:1)

尝试使用

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

找出堆栈跟踪和&#34;麻烦&#34;代码行。

答案 4 :(得分:0)

} else if (paramTypes[j]

不应该是params[ j ]