-2

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

托管 bean 类的构造函数:

public InterViewDto() throws SQLException {

        User u = getCurrentUser();
        InterviewDao d = new InterviewDao();
        List<InterViewDto> 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;
    }
4

1 回答 1

0

你有一个循环依赖。您的 DTO 构造函数会访问数据库,这反过来会创建一个新的 DTO 来表示从数据库加载的数据,该数据会进入数据库并来回移动,直到您溢出调用堆栈。

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

您的 InterViewDto 构造函数从 DAO 加载数据,或者 DAO 构造一个新的 InterViewDto 对象。选择一个或另一个。

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

public class InterViewDto {
    public InterViewDto() {
    }

    ...

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

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

于 2013-03-17T15:35:37.397 回答