【问题标题】:How to get records same column name values in jdbc?如何在 jdbc 中获取记录相同的列名值?
【发布时间】:2019-03-12 15:35:44
【问题描述】:

我已经从 db 中检索了所有包含字段名称、电子邮件、id、经理的记录,我需要获取所有具有相同经理的数据记录并将其保存到列表中我该怎么做?

我已经从 db has 检索到值

 List<Map<String, String> dbData=new ArrayList<>();
while(query.next()){
 LinkedHashMap<String,String> rowData=new LinkedHashMal<>();
 for(columns=1;columns<total columns; columns++){
 rowData.put(columnNames,query.getString(columnNames.get(columns));
 }
 dbData.add(rowData);
}

其中 columnNames 是包含该列所有标题的标题列表。

所以我需要获取同一经理的所有记录并将其导出到单独的 Excel 文件中

【问题讨论】:

  • "which have same manager" 您的意思是希望所有记录都有一个特定的经理,还是希望将数据收集到共享同一管理器的记录组,例如Map&lt;Manager, List&lt;Record&gt;&gt; 的结果?
  • 你完全一样,但我不知道如何实现它
  • 如果它有相同的经理我想要它作为列表
  • 那么,如果您不使用 POJO 模型,列表应该包含什么?

标签: java database jdbc


【解决方案1】:

如果您想按某个经理进行过滤,您必须将该经理作为查询的WHERE 子句包括在内。比如:

SELECT name, email, id, manager FROM Table WHERE manager = 'manager1'

获得所需的所有记录后,您可以遍历 ResultSet 并将它们添加到您的列表中。

更多信息可以查看this link

【讨论】:

【解决方案2】:

首先,您将数据库中的所有行读入 Java 对象。

假设您将数据读入 List&lt;Record&gt;,然后您可以使用 Java 8 流对数据进行分组:

List<Record> rows = ...
Map<String, List<Record>> byManager = rows.stream()
        .collect(Collectors.groupingBy(Record::getManager, Collectors.toList()));

更新

如果记录是Map&lt;String, String&gt; 将列名映射到字符串化值,则代码为:

List<Map<String, String>> rows = ...
Map<String, List<Map<String, String>>> byManager = rows.stream()
        .collect(Collectors.groupingBy(row -> row.get("manager"), Collectors.toList()));

【讨论】:

  • 我没有使用 pojo 模型
  • @user10506901 不知道你说的“不使用pojo模型”是什么意思。问题说 “我需要获取所有数据记录 [...] 并将其保存到列表中”。要将记录存储在列表中,您需要一些类来保存记录数据。该类是否是 POJO 无关紧要。
  • 我已经使用 map 检索值作为键和值对,如果记录具有相同的管理器并且我没有使用 pojo,因为它是动态的,如果我添加新列,我会卡住如何对记录进行分组在 db 中,我需要更改 pojo 类
  • @user10506901 所以您已经将数据读入List&lt;Map&lt;String, Object&gt;&gt;List&lt;Map&lt;String, String&gt;&gt; 或类似的东西?请编辑问题并展示您已经完成的工作,这样我们就可以停止浪费时间尝试猜测。
猜你喜欢
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多