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

时间:2018-03-28 14:52:05

标签: java jdbc nullpointerexception ojdbc

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

1 个答案:

答案 0 :(得分:1)

您还没有获得第一个结果集的方法。如果你得到错误,也许你应该这样做?

我的猜测是你使用相同的语句来获取第二个结果集,因为在java中,当你第一次使用while循环时,每个语句不能有多个打开的结果集声明并关闭第一个结果集。

Statement API说:

  

默认情况下,每个Statement对象只能同时打开一个ResultSet对象。因此,如果读取一个ResultSet对象与另一个ResultSet对象的读取交错,则每个ResultSet对象必须由不同的Statement对象生成。 Statement接口中的所有执行方法都隐式关闭一个语句的当前ResultSet对象(如果存在一个打开的对象)。

因此尝试在while循环中创建一个新的语句对象并使用那个