2013-03-17 2 views
-2

Я хочу отобразить список записей из базы данных для вывода текстового поля. У меня возникла проблема с методом с записью из базы данных. Это вызывает бесконечный цикл, поскольку он вызывает конструктор управляемого bean-класса. Вот код.NullPointerException происходит бесконечно

Конструктор класса управляемой фасоли:

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; 
    } 
+0

«Принесите запись из базы данных, которая вызывает бесконечный цикл» - не имеет для меня никакого смысла. Вы можете уточнить? – duffymo

+3

Вы создаете 'new InterViewDto()' внутри 'getCall', но вы также вызываете' getCall' внутри 'нового конструктора InterViewDto() ... не очевидно, почему существует бесконечный цикл? – Esailija

+0

в консоли, где это происходит, как петля –

ответ

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()); 
    } 
} 

Затем измените конструктор на пустой.

Смежные вопросы