指数3超出范围

时间:2017-02-28 13:07:22

标签: java sql

我是这个论坛的新手,也是SQL新手。

我的以下代码存在问题。

它抛出的SQLException错误是the index 3 is out of range

我不知道问题是什么。

public static ArrayList<LotInfoVO> getLotInfoRecords3(String studName,String DoubleCheck, String lngstudid) throws ClassNotFoundException {
        {
            ArrayList <LotInfoVO> lotRecords4 = new ArrayList<LotInfoVO>();
            try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                PreparedStatement stmt = getCon().prepareStatement("SELECT * FROM MesLib.tblSchoolRecordsr where strstudName = ? and strDoubleCheckCode = ? and (lngstudID NOT LIKE '-[^0-9]') ");
                stmt.setString(1, studName);
                stmt.setString(2, DoubleCheck);
                stmt.setString(3, lngstudID);

                ResultSet rs = stmt.executeQuery();
                while(rs.next()) {
                    LotInfoVO voLotInfo3 = new LotInfoVO();
                    voLotInfo3.setStstudName(rs.getString("strstudName"));
                    voLotInfo3.setLngStudID(rs.getString("lngStudID"));
                    voLotInfo3.setLngStudSubID(rs.getString("lngStudSubID"));
                    voLotInfo3.setStrDoubleCheckCode(rs.getString("strDoubleCheckCode"));
                    voLotInfo3.setStrPackage(rs.getString("strCourse"));
                    voLotInfo3.setStrDimension(rs.getString("strSchool"));
                    voLotInfo3.setStrLead(rs.getString("strSubjects"));
                    //get values for other instance variables
                    lotRecords4.add(voLotInfo3);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }  finally {
                closeConnection();
            }
            return lotRecords4;
        }
    }

对不起我的编码我只是一个新的程序员在城里..

所以请好好谢谢!

2 个答案:

答案 0 :(得分:1)

只需评论此行。

stmt.setString(3, lngstudID);

查询和提供参数中的问号(?)的数量应该相同。

当您提供额外lngstudId时,您将获得例外。

答案 1 :(得分:0)

            PreparedStatement stmt = getCon().prepareStatement("SELECT * FROM MesLib.tblSchoolRecordsr where strstudName = ? and strDoubleCheckCode = ? and (lngstudID NOT LIKE '-[^0-9]') ");
            stmt.setString(1, studName);
            stmt.setString(2, DoubleCheck);
            stmt.setString(3, lngstudID);

sql 中的两个问号(?)。所以这个查询只需要两个参数。 但是您要设置三个参数。因此,索引超出范围异常发生。

要避免此异常,请删除此行。根据你的sql原因这行(下面)是不必要的

            stmt.setString(3, lngstudID);