2012-10-26 3 views
1

У меня есть мой основной класс, DTO и DAO. что я хочу сделать, это прочитать таблицу базы данных CUSTOMER (два поля NAME, SURNAME), а затем записать ее в txt-файл. Я не могу заставить его хранить значения в DTO, чтобы мой основной класс мог его получить.Создание списка значений базы данных и сохранение в DTO

My DTO существует из двух полей, НАЗВАНИЕ и ФАМИЛИЯ с геттерами и сеттерами. Проблема заключается в моем DAO со списком

* Пожалуйста, имейте в виду, что я студент.

Это то, что я сделал до сих пор: результат, пишет в файл, как это: [имя фамилия, имя фамилия, имя фамилия,] мне нужно это написать файл трубы deliminated «|»

public CustomerDTO getDetails(Connection conn) throws SQLException { 

    CustomerDTO customerDTO = new CustomerDTO(); 
    ResultSet rs = null; 
    PreparedStatement pstmnt = null; 

    try { 
     // SELECT NAME, SURNAME FROM CUSTOMER 
     StringBuffer stringBuffer = new StringBuffer("SELECT " + DBConstants.CUST_NAME + ", "); 
     stringBuffer.append(DBConstants.CUST_SURNAME); 
     stringBuffer.append(" FROM " + "CUSTOMER"); 
     //build string 
     String query = stringBuffer.toString(); 
     //prepared statement 
     pstmnt = conn.prepareStatement(query); 
     //execute preparestatement 
     rs = pstmnt.executeQuery(); 
     //keep reading next line in table - .next() method means next line 
     List myList = new ArrayList(); 

     while (rs.next()) { 
      String ss = rs.getString("NAME"); 
      String sss = rs.getString("SURNAME"); 
      myList.add(ss + " " + sss); 
      customerDTO.setName(myList.toString()); 
      customerDTO.setSurname(myList.toString()); 
     } 
    } catch (Exception e) { 
     e.getMessage(); 
    } 
    rs.close(); 
    //return DTO with details. 
    return customerDTO; 
} 
+0

Ваш метод возвращает один DTO вместо того, чтобы возвращать список. Вы должны изменить подпись метода, создать новый CustomerDTO на каждой итерации, а затем - в список и вернуть этот список. –

+0

im не уверен, что это значит, – user1759247

+0

См. Мой ответ, который более подробно освещен. –

ответ

3

Я не уверен, где и как вы пишете этот файл, но в отслеживании кода, вот что, я думаю, может быть неправильным.

В этом WHILE LOOP:

while (rs.next()) { 
    String ss = rs.getString("NAME"); 
    String sss = rs.getString("SURNAME"); 

    // You'r adding an element here that would have a value like this: "John Doe" 
    myList.add(ss + " " + sss); 


    // Single instance of a DTO whose value. State values will always be replaced with the 
    // string represenation of the myList variable. 
    // 
    // Both properties will always contain the same value no matter what. 
    customerDTO.setName(myList.toString()); 
    customerDTO.setSurname(myList.toString()); 
} 

Я думаю, что вы действительно должны делать что-то вроде этого:

// Notice the use of Generics (Look it up). It is more compile time safe and better practice. 
ArrayList<CustomerDTO> customerDTOS = new ArrayList<CustomerDTO>(); 
while (rs.next()) { 
    String ss = rs.getString("NAME"); 
    String sss = rs.getString("SURNAME"); 

    CustomerDTO customerDTO = new CustomerDTO(); 
    customerDTO.setName(ss); 
    customerDTO.setSurName(sss); 

    customerDTOS.Add(customerDTO); 
} 

return customerDTOS; 

Короче говоря, ваш метод должен возвращать список CustomerDTOs, а затем вы могут использовать их для записи в ваш файл.

Удачи.

1

Метод должен быть объявлен как

public List<CustomerDTO> getDetails(Connection conn) throws SQLException { 
    ... 
} 

, поскольку его цель состоит в том, чтобы возвращать список клиентов (по одному на строку в таблице).

Внутри метода, вы должны иметь следующее:

// create the result list, initially empty 
List<CustomerDTO> result = new ArrayList<CustomerDTO>(); 

// iterate through the rows 
while (rs.next()) { 

    // TODO: create a new CustomerDTO, and populate it with the row's data 
    // TODO: add this DTO to the result list 
} 

return result; 

Затем вызывающий этот метод будет перебирать список CustomerDTOs, и записать их в файл. Каждый метод несет ответственность: DAO обрабатывает извлечение базы данных, но не обрабатывает файл IO.

0

вот полный пример:

public void caller() { 
    Connection conn = null; 
    // TODO: setup connection 
    List list = getDetails(conn); 
    for (int i=0; i<list.size(); i++) { 
     CustomerDTO dto = list.get(i); 
     write(dto.getName(), dto.getSurname()); 
    } 
} 

public List getDetails(Connection conn) throws SQLException { 

    List myList = new ArrayList(); 
    ResultSet rs = null; 
    PreparedStatement pstmnt = null; 

    try { 
     // SELECT NAME, SURNAME FROM CUSTOMER 
     StringBuffer stringBuffer = new StringBuffer("SELECT " + DBConstants.CUST_NAME  + ", "); 
     stringBuffer.append(DBConstants.CUST_SURNAME); 
     stringBuffer.append(" FROM " + "CUSTOMER"); 
     //build string 
     String query = stringBuffer.toString(); 
     //prepared statement 
     pstmnt = conn.prepareStatement(query); 
     //execute preparestatement 
     rs = pstmnt.executeQuery(); 
     //keep reading next line in table - .next() method means next line 

     while (rs.next()) { 
      String ss = rs.getString("NAME"); 
      String sss = rs.getString("SURNAME"); 
      CustomerDTO customerDTO = new CustomerDTO(); 
      customerDTO.setName(ss); 
      customerDTO.setSurname(sss); 
      myList.add(customerDTO); 
     } 
    } catch (Exception e) { 
     e.getMessage(); 
    } 
    rs.close(); 
    //return list of DTOs. 
    return myList; 
} 

Я оставляю реализацию метода записи к вам. Также. рассмотрите возможность использования Generics, если это позволяет Java.

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