我想用我的数据库字段值创建一个列表。有 2 列,名称和姓氏。我想创建一个列表,将所有名称存储在字段的名称列中,然后添加到我的 DTO。
这可能吗?
您可以遵循的步骤: -
首先,您需要有一个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)
,其中包含name
和surname
作为字段。并从每个实例化它ResultSet
并将其添加到List<FullName>
不幸的是,JDBC 没有提供任何方法来方便地在单行中执行此操作。但是还有其他 API,例如jOOQ(免责声明:我为 jOOQ 背后的公司工作):
List<DTO> list =
DSL.using(connection)
.fetch("SELECT first_name, last_name FROM table")
.into(DTO.class);
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));
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 来完成。
这是。你试过什么?
要访问数据库,您需要使用 JDBC并执行查询,给您一个ResultSet
.
我会创建一个FullName
用 2 个字符串字段name
和surname
. 只需使用循环填充这些
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
,这将使您可以自由地添加其他属性。