Java 无限制发生的NullPointerException
我想显示从数据库到输出文本字段的记录列表。我对从数据库中获取记录的方法有问题。当它在托管bean类的构造函数中调用时,会导致一个无限循环。这是代码 托管bean类的构造函数:Java 无限制发生的NullPointerException,java,Java,我想显示从数据库到输出文本字段的记录列表。我对从数据库中获取记录的方法有问题。当它在托管bean类的构造函数中调用时,会导致一个无限循环。这是代码 托管bean类的构造函数: public InterViewDto() throws SQLException { User u = getCurrentUser(); InterviewDao d = new InterviewDao(); List<InterViewDto> dao1
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
。。。不清楚为什么会有无限循环?在控制台中,它就像循环一样发生。你以前问过同样的问题。。