我正在使用一个表从数据库中获取数据,但是我的表保存数据列。我想使用resultset从表中逐列检索数据。但每次我得到“列索引”范围错误。“这是我用来从表中检索数据的代码
这是我的选择陈述
String consultantRatio = " select count(distinct CANDYS.candidateId) from "
+" (Select C.candidateID,J.joborderID from db_candidatenote C, db_jobordernote J "
+" where C.noteid=J.noteid and C.action like 'Engaged' "
+" and C.dateadded between "+ "\""+ new java.sql.Timestamp(startDate.getTime())+ "\" and "+ "\""+ new java.sql.Timestamp(endDate.getTime())+ "\" ) N,"
+" (Select distinct Note.candidateId, JNote.jobOrderID "
+" from db_candidatenote Note,db_jobordernote JNote, corporateuser User where "
+" Note.noteid=JNote.noteid "
+" and Note.commentingPersonID = User.userid "
+" and User.name= "+"\""+consultantNameList.get(i)+"\""
+" and Note.action='Sourcing') CANDYS "
+" where N.candidateID= CANDYS.candidateId "
+" and N.joborderid=CANDYS.jobOrderID "
+" union"
+" select count(distinct CANDYS.candidateId) from "
+" (Select C.candidateID,J.joborderID from db_candidatenote C, db_jobordernote J "
+" where C.noteid=J.noteid and C.action like 'Qualification' "
+" and C.dateadded between "+ "\""+ new java.sql.Timestamp(startDate.getTime())+ "\" and "+ "\""+ new java.sql.Timestamp(endDate.getTime())+ "\" ) N,"
+" (Select distinct Note.candidateId, JNote.jobOrderID "
+" from db_candidatenote Note,db_jobordernote JNote, corporateuser User where "
+" Note.noteid=JNote.noteid "
+" and Note.commentingPersonID = User.userid "
+" and User.name= "+"\""+consultantNameList.get(i)+"\""
+" and Note.action='Sourcing') CANDYS "
+" where N.candidateID= CANDYS.candidateId "
+" and N.joborderid=CANDYS.jobOrderID "
+" union "
+" select count(distinct CANDYS.candidateId) from "
+" (Select C.candidateID,J.joborderID from db_candidatenote C, db_jobordernote J "
+" where C.noteid=J.noteid and C.action like 'Internal Submission' "
+" and C.dateadded between "+ "\""+ new java.sql.Timestamp(startDate.getTime())+ "\" and "+ "\""+ new java.sql.Timestamp(endDate.getTime())+ "\" ) N,"
+" (Select distinct Note.candidateId, JNote.jobOrderID "
+" from db_candidatenote Note,db_jobordernote JNote, corporateuser User where "
+" Note.noteid=JNote.noteid "
+" and Note.commentingPersonID = User.userid "
+" and User.name= "+"\""+consultantNameList.get(i)+"\""
+" and Note.action='Sourcing') CANDYS "
+" where N.candidateID= CANDYS.candidateId "
+" and N.joborderid=CANDYS.jobOrderID "
+" union "
+" select count(distinct CANDYS.candidateId) from sendout S,"
+" (Select distinct Note.candidateId, JNote.jobOrderID "
+" from db_candidatenote Note,db_jobordernote JNote, corporateuser User where "
+" Note.noteid=JNote.noteid "
+" and Note.commentingPersonID = User.userid "
+" and User.name= "+"\""+consultantNameList.get(i)+"\""
+" and Note.action='Sourcing' ) CANDYS "
+" where S.candidateID= CANDYS.candidateId "
+" and S.joborderid=CANDYS.jobOrderID "
+" and S.dateadded between "+ "\""+ new java.sql.Timestamp(startDate.getTime())+ "\" and "+ "\""+ new java.sql.Timestamp(endDate.getTime())+ "\" "
+" union"
+" select count(distinct CANDYS.candidateId) from "
+" (Select C.candidateID,J.joborderID from db_candidatenote C, db_jobordernote J "
+" where C.noteid=J.noteid and C.action like '%Interview%' "
+" and C.dateadded between "+ "\""+ new java.sql.Timestamp(startDate.getTime())+ "\" and "+ "\""+ new java.sql.Timestamp(endDate.getTime())+ "\" ) N,"
+" (Select distinct Note.candidateId, JNote.jobOrderID "
+" from db_candidatenote Note,db_jobordernote JNote, corporateuser User where "
+" Note.noteid=JNote.noteid "
+" and Note.commentingPersonID = User.userid "
+" and User.name= "+"\""+consultantNameList.get(i)+"\""
+" and Note.action='Sourcing') CANDYS "
+" where N.candidateID= CANDYS.candidateId "
+" and N.joborderid=CANDYS.jobOrderID "
+" union "
+" select count(distinct CANDYS.candidateId ) from placement P,(Select distinct Note.candidateId, JNote.jobOrderID "
+" from db_candidatenote Note,db_jobordernote JNote, corporateuser User where "
+" Note.noteid=JNote.noteid "
+" and Note.commentingPersonID = User.userid "
+" and User.name= "+"\""+consultantNameList.get(i)+"\""
+" and Note.action='Sourcing') CANDYS "
+" where P.candidateID= CANDYS.candidateId "
+" and P.joborderid=CANDYS.jobOrderID "
+" and P.dateadded between "+ "\""+ new java.sql.Timestamp(startDate.getTime())+ "\" and "+ "\""+ new java.sql.Timestamp(endDate.getTime())+ "\" " ;
while (rsServeResource1.next()) {
// these variables will be divided by actual milestone numbers like source to engage / engage etc within that time range ..
if(rsServeResource1.getInt(1)!=0){
sourceToEngage = rsServeResource1.getInt(1);
}if(rsServeResource1.getInt(2)!=0){
sourceToQualification =rsServeResource1.getInt(2);
}if(rsServeResource1.getInt(3)!=0){
sourceToIs = rsServeResource1.getInt(3);
} if(rsServeResource1.getInt(4)!=0){
sourceToPresent =rsServeResource1.getInt(4);
} if(rsServeResource1.getInt(5)!=0){
sourceToInterview = rsServeResource1.getInt(5);
} if(rsServeResource1.getInt(6)!=0){
sourceToPlacament = rsServeResource1.getInt(6);
}
每次我运行代码。它给我以下例外。
Column Index out of range, 2 > 1.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.ResultSetImpl.checkColumnBounds(ResultSetImpl.java:830)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2714)
at com.msh.servlet.MileStoneMonthlyJob.execute(MileStoneMonthlyJob.java:530)
at org.quartz.core.JobRunShell.run(JobRunShell.java:223)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
完成
所以问题出在哪里我无法使其发挥作用。有人请帮助。
答案 0 :(得分:0)
Resultset中只有一列...所以如果你没有指向下一列,那么将抛出IndexOutOfRangeException。
但是对于进一步的陈述,以下内容可能对您有用:
您可以尝试从元数据中读取Columncount,如:
rsServeResource1.getMetaData().getColumnCount();
并循环抛出你的行。应该是这样的:
int[] colcontent = new int[6];
while (rsServeResource1.next()) {
int count = rsServeResource1.getMetaData().getColumnCount();
for (int i = 0; i <= count; i++){
colcontent[i] = rs.getInt(1);
}
}
sourceToEngage = colcontent(0);
sourceToQualification =colcontent(1);
sourceToIs = colcontent(2);
sourceToPresent =colcontent(3);
sourceToInterview = colcontent(4);
sourceToPlacament = colcontent(5);
现在猜猜应该正确填写属性吗?
答案 1 :(得分:0)
您的数据按行排列,只有一列。所以我们应该总是在结果集中使用索引1.没有规定在结果集中旋转数据