如何修复列索引超出范围 SQLException
Posted
技术标签:
【中文标题】如何修复列索引超出范围 SQLException【英文标题】:How to fix Column Index out of range SQLException 【发布时间】:2013-06-16 22:10:23 【问题描述】:当我传递一个查询时,我遇到了错误。
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;
【问题讨论】:
【参考方案1】:您在语句中选择一列,然后访问 ResultSet 中的多列。 要解决您的问题,您必须从数据库中选择以后要从 ResultSet 中读取的内容。
【讨论】:
你能多解释一下吗 您的查询“从 stu_attendancemaster 中选择时间段,其中 classid=? 和缺席dt>=? 和缺席dt 【参考方案2】:这个语句有错误:
PreparedStatement pstm=con.prepareStatement("select period from stu_attendancemaster where classid=? and absentdt>=? and absentdt<=?");
您必须在选择查询中选择所有 12 个字段。
例如:(我假设您的表中有 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()
中的列数应该相同。
【讨论】:
是的,但我想通过这种方法单独使用一段时间 在这种情况下使用:rs.getInt(1)
。将rs.getInt(2)
删除为rs.getInt(12)
【参考方案3】:
选择语句是:
("select period from stu_attendancemaster where classid=? and absentdt>=? and absentdt<=?");
但是您在结果集中获得的字段多于句点
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));
当您只选择期间时,您无法从结果集中获取这些数据。
【讨论】:
以上是关于如何修复列索引超出范围 SQLException的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLException:列索引超出范围,0 < 1
列索引超出范围,3 > 2。嵌套异常是 java.sql.SQLException:
Node.js 和 sqlite、SQLITE_RANGE:绑定或列索引超出范围
pandas读取csv数据index_col参数指定作为行索引的数据列索引列表形成复合(多层)行索引使用iloc基于行索引位置范围筛选dataframe数据行(指定起始位置和结束位置)