当前位置: 首页 > 知识库问答 >
问题:

使用数据库值创建列表并存储在DTO中

蓟和煦
2023-03-14

我有一个主类,一个DTO和一个DAO。我想做的是读取数据库表 CUSTOMER(两个字段名称,姓氏),然后将其写入 txt 文件。我似乎无法让它将值存储在 DTO 中,以便我的主类可以获取它。

我的DTO存在两个字段,名和姓,getters和setters。问题出在我的刀与列表上

*请记住我是一名学生。

这是我到目前为止所做的:结果,像这样写入文件:[姓名姓氏,姓名姓氏,]我需要它写入分隔的文件管道“|”

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

共有3个答案

许博易
2023-03-14

这里有一个完整的例子:

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

我把写方法的实现留给你。也。如果您的java允许,请考虑使用泛型。

穆俊杰
2023-03-14

该方法应声明为

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;

然后,此方法的调用方将遍历CustomerDTO列表,并将其写入文件。每个方法都有自己的责任:DAO处理数据库检索,但不处理文件IO。

卫阳曜
2023-03-14

我不确定您在哪里或如何编写此文件,但在跟踪代码时,我认为可能是错误的。

在这个WHILE循环中:

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;

简而言之,您的方法应返回 CustomerDTO 的列表,然后可以使用它们写入文件。

祝你好运。

 类似资料:
  • 问题内容: 我正在尝试以android应用程序的形式创建一个小型课程聚合程序。 我的课程全部存储在Firebase实时数据库中,该数据库可从firebase控制台查看,并且一切正常。 问题是我已经编写了一个Java方法来连接到DB,从DB检索数据,将数据转换为Custom Java对象,将其附加到另一个Custom Java对象,然后将该对象保存到ArrayList中。 与数据库的连接已成功建立,

  • 问题内容: 我有一个带有字符串值的变量。我想创建一个以值作为其名称/标识符的列表,然后将值附加到列表中。因此,假设变量,我想创建一个名为的列表。显然,就我而言,我不知道的价值。 问题答案: 别。创建动态变量很少是一个好主意,并且,如果您尝试创建本地名称(在函数内部),则很困难,并且会极大地影响性能。 请改用字典: 命名空间只是用于在其中查找名称的代码的默认词典。创建更多此类词典更加容易和整洁。 您

  • 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 知道怎样输入命令,便可以访问数据库了。 假定在你的家(你的“动物园”)中有很多宠物,并且你想跟踪关于它们各种类型的信息。你可以通过创建表来保存你的数据并根据所需要的信息装载他们,然后你可以从表中检索数据来回答关于动物不同种类的问题。本节显示如何做到所有这些事情: ·创建数据库 ·创建数据

  • 问题内容: 大家好,我想在html页面上显示数据库表的全部内容。我试图先从数据库中获取记录并存储在其中,但是当我在html页面上返回数组列表时,它仅重复显示最后一条记录作为数据库表的计数。这是下面的代码: 问题答案: 尝试以下代码 这是我的模特班 这是我的查看方法

  • 问题内容: 我想创建一个具有两列的名称表,其中的名称是从数据库中获取的,但是我不知道如何..我需要帮助。 姓名:詹姆斯,约翰,保罗,彼得 这是我的代码: 我希望输出是这样的: 但是我的代码返回: 我需要你的帮助。 问题答案: 好吧,如果没有关系并且该表仅用于布局: 并在CSS中: 无论如何,我倾向于只将表用于显示实际表,并避免将它们用于布局。您可以使用div进行任何操作(或者在这种情况下,您也可以

  • 我有一个程序,可以根据基本工资和佣金销售额计算员工的年薪。我想更进一步,创建一个数组列表,询问员工姓名,然后创建一个数组,存储程序中的值,并为输入的每个员工姓名打印出这些值。 我想我需要创建一个for或其他循环来收集数据。问题是我不知道在哪里做以及如何创建数组。我有两个类: 1类我的佣金变量和计算: 1个类,用于我的主要和用户输入