String[] Starttime= new String[5000];
String[] Endtime = new String[5000];
int st=0;
int et=0;
while(rs.next()) {
ResultSet rs_second=stmt.executeQuery("*Select Query*");
while (rs_second.next()) {
if(condition){
rs_second.previous();
Endtime[et]=rs_second.getString("rec_datetime");
rs_second.next();
et=et+1;
}
else if(condition){
Starttime[st]=rs_second.getString("rec_datetime");
st=st+1;
}
}
System.out.println();
System.out.println(st);
System.out.println(et);
for(int i=0;i<st;i++) {
Date Start=new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").parse(Starttime[i]);
Date End=new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").parse(Endtime[i]);
long diff = End.getTime() - Start.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
System.out.println(diffDays+" Days "+diffHours +" Hours "+diffMinutes+" Minutes "+diffSeconds+" Seconds");
}
}
执行上面的代码时,首先代码运行得非常好,但是再次访问rs.next()
时。它显示:
java.lang.NullPointerException
at oracle.jdbc.driver.ScrollableResultSet.next(ScrollableResultSet.java:344)
at triage.Triage.main(Triage.java:84)
我试图单独执行rs.next()
,它包含17条记录。
尝试了所有但无法调试异常。
此问题与What is a nullpointerexception and how do I fix it不重复
在这种情况下,我无法调试它为什么会出现,因为代码运行得非常好,并且当第二次遇到while(rs.next())
时,会引起空指针异常。
答案 0 :(得分:1)
您还没有获得第一个结果集的方法。如果你得到错误,也许你应该这样做?
我的猜测是你使用相同的语句来获取第二个结果集,因为在java中,当你第一次使用while循环时,每个语句不能有多个打开的结果集声明并关闭第一个结果集。
Statement API说:
默认情况下,每个Statement对象只能同时打开一个ResultSet对象。因此,如果读取一个ResultSet对象与另一个ResultSet对象的读取交错,则每个ResultSet对象必须由不同的Statement对象生成。 Statement接口中的所有执行方法都隐式关闭一个语句的当前ResultSet对象(如果存在一个打开的对象)。
因此尝试在while循环中创建一个新的语句对象并使用那个