要列出的结果集

时间:2012-10-22 10:52:53

标签: java database list

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

这可能吗?

3 个答案:

答案 0 :(得分:6)

您可以遵循的步骤: -

  • 首先,你需要一个List<String>来存储你的所有名字。声明如下: -

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

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

    while(resultSet.next()) {
        nameList.add(resultSet.getString("name"));
    }
    
  • 现在,由于您没有提供有关DTO的足够信息,因此您需要了解该部分,如何将此ArrayList添加到DTO

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

答案 1 :(得分:2)

是的。你有什么尝试?

要访问数据库,您需要use JDBC并执行查询,并为您提供ResultSet

我会创建一个名为FullName的类,其中包含2个字符串字段namesurname。只需使用

在循环中填充它们
rs.getString("NAME");  // column name
rs.getString("SURNAME");

e.g。

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

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

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

答案 2 :(得分:2)

不幸的是,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());

我已经将Java 8用于Spring JDBC / Apache DbUtils示例,但也可以使用旧版本的Java来完成。