Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 索引3超出范围_Java_Sql - Fatal编程技术网

Java 索引3超出范围

Java 索引3超出范围,java,sql,Java,Sql,我是这个论坛的新手,也是SQL的新手 我的以下代码有问题 它抛出了一个SQLException错误,即索引3超出范围 我不知道有什么问题 public static ArrayList<LotInfoVO> getLotInfoRecords3(String studName,String DoubleCheck, String lngstudid) throws ClassNotFoundException { { ArrayList <

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

我的以下代码有问题

它抛出了一个
SQLException
错误,即
索引3超出范围

我不知道有什么问题

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;
        }
    }
public static ArrayList getLotInfoRecords3(String studName、String DoubleCheck、String lngstudid)抛出ClassNotFoundException{
{
ArrayList lotRecords4=新的ArrayList();
试一试{
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
PreparedStatement stmt=getCon().prepareStatement(“从MesLib.tblSchoolRecordsr中选择*,其中strstudName=?和strDoubleCheckCode=?和(lngstudID不象'-[^0-9]'));
stmt.setString(1,studName);
stmt.设置管柱(2,双重检查);
stmt.setString(3,lngstudID);
ResultSet rs=stmt.executeQuery();
while(rs.next()){
LotInfoVO voLotInfo3=新的LotInfoVO();
volotinfo.setStstudName(rs.getString(“strstudName”);
volotinfo.setLngStudID(rs.getString(“lngStudID”);
volotinfo.setLngStudSubID(rs.getString(“lngStudSubID”);
setStrDoubleCheckCode(rs.getString(“strDoubleCheckCode”);
volotinfo.setStrPackage(rs.getString(“strCourse”);
volotinfo.setStrDimension(rs.getString(“strSchool”);
volotinfo.setStrLead(rs.getString(“strSubjects”);
//获取其他实例变量的值
lotRecords4.add(volotinfo);
}
}捕获(SQLE异常){
e、 printStackTrace();
}最后{
closeConnection();
}
返回记录4;
}
}
对不起我的编码我只是一个新来的程序员


所以请对我好一点谢谢

只需评论这一行

stmt.setString(3, lngstudID);
查询和提供参数中的问号(?)数量应相同


当您提供额外的
lngstudId
时,您会遇到异常情况。

只需对这一行进行注释即可

stmt.setString(3, lngstudID);
            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);
查询和提供参数中的问号(?)数量应相同

当您提供
lngstudId
作为额外数据时,您将得到异常

            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中有两个问号(?)。所以这个查询只需要两个参数。 但您正在设置三个参数。因此,索引3超出范围出现异常

要避免此异常,请删除此行。因为根据您的sql,这一行(以下)是不必要的

            stmt.setString(3, lngstudID); 
在sql中有两个问号(?)。所以这个查询只需要两个参数。 但您正在设置三个参数。因此,索引3超出范围出现异常

要避免此异常,请删除此行。因为根据您的sql,这一行(以下)是不必要的

            stmt.setString(3, lngstudID); 

SQL代表“结构化查询语言”。请告诉我们(更新标签)您的DBMS是什么?SQL Server?神谕等等,当您询问异常时,始终发布异常的完整堆栈跟踪。根据您对消息的重新措辞,我怀疑原因是您为语句设置了3个参数,尽管它只有2个
。您的查询只有两个
占位符,而不是三个。请计算查询中
参数占位符的数量。然后数一数要设置多少。这个错误应该很明显。很抱歉回复太晚。。。我正在使用SQL Server,这对我来说是新的。谢谢你的评论,但我需要lngStudID,所以我应该放=?最后,SQL代表“结构化查询语言”。请告诉我们(更新标签)您的DBMS是什么?SQL Server?神谕等等,当您询问异常时,始终发布异常的完整堆栈跟踪。根据您对消息的重新措辞,我怀疑原因是您为语句设置了3个参数,尽管它只有2个
。您的查询只有两个
占位符,而不是三个。请计算查询中
参数占位符的数量。然后数一数要设置多少。这个错误应该很明显。很抱歉回复太晚。。。我正在使用SQL Server,这对我来说是新的。谢谢你的评论,但我需要lngStudID,所以我应该放=?最后一个?但是我需要那个lngStudID我该怎么处理查询?但是我需要那个lngStudID我该怎么处理查询?我把(lngStudID不象'-[^0-9]')改成了isNumeric(lngStudID)=1,但我还是得到了同样的错误我把(lngStudID不象'-[^0-9]')改成了isNumeric(lngStudID)=1,但我还是得到了同样的错误