第二次遇到 while(rs.next()) 时得到 java.lang.NullPointerException

Getting java.lang.NullPointerException when while(rs.next()) is encountered second time

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()) 时,会导致空指针异常。

您没有包括如何获得第一个结果集。如果您在那里遇到错误,也许您应该这样做?

我的猜测是您使用相同的语句来获取第二个结果集,因为在 java 中,当您进入第一次重用该语句并关闭第一个结果集。

声明 API 说:

By default, only one ResultSet object per Statement object can be open at the same time. Therefore, if the reading of one ResultSet object is interleaved with the reading of another, each must have been generated by different Statement objects. All execution methods in the Statement interface implicitly close a statment's current ResultSet object if an open one exists.

所以尝试在 while 循环中创建一个新的语句对象并使用它