这是我的servlet:
for (int i=0 ; i<studentID.length ; i++){
System.out.println("studentID: "+ studentID[i]);
FreeBean free = new FreeBean();
PresentationBean present = new PresentationBean();
StudentBean student = new StudentBean();
int SVavailableID = free.getAvailableID();
int EXavailableID = free.getAvailableID();
Date SVFreeDate = free.getFreeDate();
Date EXFreeDate = free.getFreeDate();
List<Object[]> list = (List<Object[]>) GenerateScheduleDAO.getFree(supervisorID[i],examinerID[i],studentID[i]);
Object[] array = null;
for (int k = 0; k < list.size(); k++) {
array = (Object[])(list.get(k));
System.out.println("tryy "+ k);
for (int j = 0; j < array.length; j++) {
System.out.println("try "+ j + "and "+ array[j]);
System.out.println("apa ni" + array[7]);
}// iterate over the Object array
} // iterate k
String studentName = (String) array[7]; // I am getting NPE here
String projectTitle = (String) array[8];
String SVName = (String) array[11];
String EXName = (String) array[13];
String day = (String) array[15];
Time start = (Time) array[16];
Time end = (Time) array[17];
Date date = (Date) array[3];
if ( studentName== null ) {
list = (List<Object[]>) GenerateScheduleDAO.getOtherFree(supervisorID[i],examinerID[i],studentID[i]);
SVavailableID = free.getAvailableID();
EXavailableID = free.getAvailableID();
studentName = (String) array[15];
projectTitle = (String) array[17];
SVName = (String) array[12];
EXName = (String) array[14];
day = (String) array[5];
start = (Time) array[6];
end = (Time) array[7];
date = (Date) array[10];
}//if takde masa yang sama
out.println("<tr>");
out.println("<td>"+ studentName+"</td>");
out.println("<td>"+ projectTitle +"</td>");
out.println("<td>"+ SVName +"</td>");
out.println("<td>"+ EXName +"</td>");
out.println("<td>"+ day +"</td>");
out.println("<td>"+ start +"</td>");
out.println("<td>"+ end+"</td>");
out.println("<td>"+ date+"</td>");
out.println("</tr>");
}//student loop
根据以上代码,GenerateScheduleDAO.getFree(supervisorID[i],examinerID[i],studentID[i])
会传递DAO中的值以匹配supervisorID
和examinerID
availabilityID
。
在某些情况下,supervisorID
和examinerID
不会有相同的availabilityID
。因此,我想用if
条件来处理它。它将在String studentName = (String) array[7];
上返回NPE,因为在DB中,提取了ZERO行。这就是它进入NPE的原因。
我的想法是通过if ( studentName== null )
处理它。它将使用审查员的availableID作为替代,但它没有成功。它将永远返回NPE。它甚至没有通过if
条件。
我怎样才能做到这一点?
答案 0 :(得分:0)
在假设array
包含值之前,您需要检查结果集的大小:
// declarations
String studentName;
String projectTitle;
String SVName;
String EXName;
String day;
Time start;
Time end;
Date date;
List<Object[]> list = (List<Object[]>) GenerateScheduleDAO.getFree(supervisorID[i],examinerID[i],studentID[i]);
if (!list.isEmpty() {
for (int k = 0; k < list.size(); k++) {
array = (Object[])(list.get(k));
System.out.println("tryy "+ k);
for (int j = 0; j < array.length; j++) {
System.out.println("try "+ j + "and "+ array[j]);
System.out.println("apa ni" + array[7]);
}// iterate over the Object array
} // iterate k
studentName = (String) array[7];
projectTitle = (String) array[8];
SVName = (String) array[11];
EXName = (String) array[13];
day = (String) array[15];
start = (Time) array[16];
end = (Time) array[17];
date = (Date) array[3];
} else {
list = (List<Object[]>) GenerateScheduleDAO.getOtherFree(supervisorID[i],examinerID[i],studentID[i]);
array = (Object[])(list.get(k));
SVavailableID = free.getAvailableID();
EXavailableID = free.getAvailableID();
studentName = (String) array[15];
projectTitle = (String) array[17];
SVName = (String) array[12];
EXName = (String) array[14];
day = (String) array[5];
start = (Time) array[6];
end = (Time) array[7];
date = (Date) array[10];
}