2

我想用我的数据库字段值创建一个列表。有 2 列,名称和姓氏。我想创建一个列表,将所有名称存储在字段的名称列中,然后添加到我的 DTO。

这可能吗?

4

3 回答 3

9

您可以遵循的步骤: -

  • 首先,您需要有一个List<String>可以存储您所有姓名的设备。像这样声明它: -

    List<String> nameList = new ArrayList<String>();
    
  • 现在,您已获取所有记录并将其存储在ResultSet. 所以我假设你可以迭代ResultSet并从中获取每一个values。您需要使用ResultSet#getString来获取name.

  • 现在,每次您获取一条记录时,获取该name字段并将其添加到您的列表中。

    while(resultSet.next()) {
        nameList.add(resultSet.getString("name"));
    }
    
  • 现在,由于您没有提供有关DTOArrayListDTO.

  • 以上list仅包含name而不是surname您想要的name。但是,如果您想要两者,则需要创建一个自定义 DTO (FullName),其中包含namesurname作为字段。并从每个实例化它ResultSet并将其添加到List<FullName>

于 2012-10-22T10:58:53.180 回答
3

不幸的是,JDBC 没有提供任何方法来方便地在单行中执行此操作。但是还有其他 API,例如jOOQ(免责声明:我为 jOOQ 背后的公司工作):

List<DTO> list =
DSL.using(connection)
   .fetch("SELECT first_name, last_name FROM table")
   .into(DTO.class);

Spring JDBC

List<DTO> list =
new JdbcTemplate(new SingleConnectionDataSource(connection, true))
   .query("SELECT first_name, last_name FROM table", (rs, rowNum) ->
       new DTO(rs.getString(1), rs.getString(2));

Apache DbUtils

List<DTO> list =
new QueryRunner()
   .query(connection, 
          "SELECT first_name, last_name FROM table", 
          new ArrayListHandler())
   .stream()
   .map(array -> new DTO((String) array[0], (String) array[1]))
   .collect(Collectors.toList());

我在 Spring JDBC / Apache DbUtils 示例中使用了 Java 8,但也可以使用旧版本的 Java 来完成。

于 2014-09-23T13:14:56.053 回答
2

这是。你试过什么?

要访问数据库,您需要使用 JDBC并执行查询,给您一个ResultSet.

我会创建一个FullName用 2 个字符串字段namesurname. 只需使用循环填充这些

rs.getString("NAME");  // column name
rs.getString("SURNAME");

例如

List<FullName> fullnames = new ArrayList<FullName>();
while (rs.next()) {
    fullnames.add(new FullName(rs));
}

请注意,我ResultSet直接通过对象填充对象。您可以选择实现一个采用 2 个名称字段的构造函数。

另请注意,我正在创建一个Fullname对象。所以名字/姓氏是分开的,你以后可以自由添加首字母等。您可能更喜欢重命名它Person,这将使您可以自由地添加其他属性。

于 2012-10-22T10:55:15.070 回答