Java 无限制发生的NullPointerException

Java 无限制发生的NullPointerException,java,Java,我想显示从数据库到输出文本字段的记录列表。我对从数据库中获取记录的方法有问题。当它在托管bean类的构造函数中调用时,会导致一个无限循环。这是代码 托管bean类的构造函数: public InterViewDto() throws SQLException { User u = getCurrentUser(); InterviewDao d = new InterviewDao(); List<InterViewDto> dao1

我想显示从数据库到输出文本字段的记录列表。我对从数据库中获取记录的方法有问题。当它在托管bean类的构造函数中调用时,会导致一个无限循环。这是代码

托管bean类的构造函数:

public InterViewDto() throws SQLException {

        User u = getCurrentUser();
        InterviewDao d = new InterviewDao();
        List<InterViewDto> dao1 = d.getCall(u.getEmailAddress());
        setDto(dao1);

    }  
public InterViewDto()引发SQLException{
用户u=getCurrentUser();
InterviewDao d=新InterviewDao();
List dao1=d.getCall(u.getEmailAddress());
setDto(dao1);
}  
从数据库中获取记录的方法:

public List<InterViewDto> getCall(String email) throws SQLException {
        System.out.print("fyc");
         List<InterViewDto> list = new ArrayList<InterViewDto>();

        String job = null;
        boolean exists = false;

        Connection c = null;
        try {

            c = openConnection();

            String query_check = "SELECT *  FROM interviewcall WHERE useremail = '"+email+"' ";
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery(query_check);

            while (rs.next()) {

                InterViewDto dto = new InterViewDto();
                dto.setDate( rs.getDate("time"));
                dto.setJobtitle( rs.getString("jobtitle"));
                dto.setJobtitle( rs.getString("useremail"));
                list.add(dto);
                System.out.print(list.get(0).getJobtitle());

            }       rs.close();

        } catch (Exception e) {
            System.out.println(e);

        } finally {
            c.close();
        }
        return list;
    }
public List getCall(字符串电子邮件)引发SQLException{
系统输出打印(“fyc”);
列表=新的ArrayList();
字符串job=null;
布尔存在=假;
连接c=null;
试一试{
c=开放连接();
String query_check=“SELECT*FROM interviewcall,其中useremail=”+“email+”;
语句st=c.createStatement();
结果集rs=st.executeQuery(查询检查);
while(rs.next()){
InterViewDto dto=新InterViewDto();
dto.setDate(rs.getDate(“时间”));
dto.setJobtitle(rs.getString(“jobtitle”);
dto.setJobtitle(rs.getString(“useremail”);
列表。添加(dto);
System.out.print(list.get(0.getJobtitle());
}rs.close();
}捕获(例外e){
系统输出打印ln(e);
}最后{
c、 close();
}
退货清单;
}

您有一个循环依赖项。DTO的构造函数会接触到数据库,而数据库又会创建一个新的DTO来表示从数据库加载的数据,该数据会往返于数据库,直到调用堆栈溢出为止

很简单,您已经合并了两种互补的设计方法

要么InterViewDto构造函数从DAO加载数据,要么DAO构造新的InterViewDto对象。挑一个或另一个

在我看来,DAO创建DTO对象更有意义。如果您希望DTO方便地委托给DAO,请考虑静态方法。

public class InterViewDto {
    public InterViewDto() {
    }

    ...

    public static fromCurrentUser() {
        return new InterviewDao().getCall(getCurrentUser().getEmailAddress());
    }
}

然后将构造函数更改为空。

“从数据库中获取记录,因为它会导致无限循环”-对我来说毫无意义。你能澄清一下吗?你在
getCall
内部创建
newinterviewdto()
,但你也在
newinterviewdto()内部调用
getCall
。。。不清楚为什么会有无限循环?在控制台中,它就像循环一样发生。你以前问过同样的问题。。