如何修复列索引超出范围SQLException

时间:2013-06-20 06:55:56

标签: java mysql exception

当我通过查询时,我遇到了错误。

 Errorno is Nil
 Error String Is Query Problem.....
 java.sql.SQLException: Column Index out of range, 2 > 1.

这是我java方法中的代码。

PreparedStatement pstm=con.prepareStatement("select period from stu_attendancemaster where classid=? and absentdt>=? and absentdt<=?");
pstm.setInt(1,classid);
pstm.setDate(2,fromdt);
pstm.setDate(3,todt);
System.out.println("qry for prd "+pstm.toString());
rs=pstm.executeQuery();
System.out.println("after qry for prd "+pstm.toString());

if(rs.next())   {
    stame = new Stu_AttendanceMasterEntity(rs.getInt(1), rs.getDate(2), rs.getInt(3), rs.getString(4), rs.getInt(5), rs.getString(6), rs.getTimestamp(7), rs.getString(8), rs.getTimestamp(9),rs.getString(10),rs.getInt(11),rs.getString(12));
}   else    {
    flag=false;
    errorstring=FN + P1 +" Class Name: " + Dep_ClassMasterDB.getClassname(classid) +" From Date: " +DateUtility.displayDate(fromdt,0) +" To Date: " +DateUtility.displayDate(todt,0) +N + V +DNE;
}
}   catch(Exception e)  {
    flag=false;
    errorstring="Query Problem..... "+e;

3 个答案:

答案 0 :(得分:10)

此声明中出现错误:

PreparedStatement pstm=con.prepareStatement("select period from stu_attendancemaster where classid=? and absentdt>=? and absentdt<=?");

您必须在选择查询中选择所有12个字段。

Ex :(我假设您的表中有12个字段stu_attendancemaster)请执行以下操作:

    PreparedStatement pstm=con.prepareStatement("select * from stu_attendancemaster where classid=? and absentdt>=? and absentdt<=?");

如果没有,你可以像这样修改你的查询语句

select `colName1`, `colName2`, `colName3`, `colName4`, `colName5`, `colName6`, `colName7`, `colName8`, `colName9`, `colName10`, `colName11`, `colName12`,  from stu_attendancemaster where classid=? and absentdt>=? and absentdt<=?

注意colName*应该是表格中的实际列名。

编辑:如果您只需要查询中的句点:只需rs.getInt(1)并将rs.getInt(2)移至rs.getInt(12)

经验法则select子句和ResultSet.getXXX()中的列数应相同。

答案 1 :(得分:6)

在语句中选择一列,然后在ResultSet中访问多个列。 要解决您的问题,您必须从数据库中选择以后要从ResultSet中读取的内容。

答案 2 :(得分:1)

select语句是:

("select period from stu_attendancemaster where classid=? and absentdt>=? and absentdt<=?");

但是你在resultSet中获得的字段多于句点

rs.getInt(1), rs.getDate(2), rs.getInt(3), rs.getString(4), rs.getInt(5), rs.getString(6), rs.getTimestamp(7), rs.getString(8), rs.getTimestamp(9),rs.getString(10),rs.getInt(11),rs.getString(12));

当您只选择期间时,无法从结果集中获取这些数据。