【问题标题】:Spring JDBC query for count of a specific fieldSpring JDBC查询特定字段的计数
【发布时间】:2013-11-03 03:00:21
【问题描述】:

我想知道如何获取数据库中特定列的计数。我的列中的每个不同值我想将返回的列值及其计数存储在 Java 列表中。这是我目前所拥有的:

public List<Sighting> getCountPest() {
    return jdbc.query("select pest_name, count(pest_name) from sighting group by pest_name", new RowMapper<Sighting>() {
                 public Sighting mapRow(ResultSet rs, int rowNum) throws SQLException {
                        Sighting sighting = new Sighting();
                        sighting.setCount(rs.getInt("count")); // will not work as  no column name in table
                        sighting.setPest_name(rs.getString("pest_name"));
                        return sighting;
                    }      
               });
}

基本上我想使用pestic_name 并返回图表的计数值。 如果有帮助,这是我的SightingRowMapper:

public Sighting mapRow(ResultSet rs, int rowNum) throws SQLException {

    User user = new User();
    user.setUsername(rs.getString("username")); // setting the username if logged in

    Sighting sighting = new Sighting();
    sighting.setId(rs.getInt("id"));
    sighting.setTotal_pests(rs.getInt("total_pests"));
    sighting.setDate(rs.getString("date"));
    sighting.setInformation(rs.getString("information"));
    sighting.setPest_name(rs.getString("pest_name"));
    sighting.setPark(rs.getString("park"));
    sighting.setLocation(rs.getString("location"));
    sighting.set_Username(rs.getString("username"));
    sighting.setUser(user);

    return sighting;
}

【问题讨论】:

  • 从数据库控制台查询是否正常?您的映射器看起来如何?
  • @Admit 已使用 RowMapper 更新。
  • @Admit 查询在我的 SQL 工作台上运行良好。给出预期的结果。我只想存储这些结果并将它们显示在饼图中。

标签: java mysql sql spring jdbc


【解决方案1】:

瞄准 我猜你需要另一个结果映射器,它只处理pest_namecount 列。至少它会更干净。

如果您不喜欢为此创建新类,您可以创建匿名类:

jdbc.query(
   "select pest_name, count(pest_name) from sighting group by pest_name",
   new RowMapper<Sighting>() {
     public Sighting mapRow(ResultSet rs, int rowNum) throws SQLException {
            return sighting;
        }      
   });

或者使用现有的,但是稍微改变一下查询:

select pest_name, count(pest_name) as total_pests

但这是一个 hack :)

【讨论】:

  • 我会先尝试创建一个匿名类。但是我在“new RowMapper(){...here...});”之间放了什么?
  • 计数必须是 Sighting 类中的属性吗?
  • 已更新。有方法实现,你应该创建并填充数据 Sighting 对象。
  • 好的,我试试这个,看看效果如何。
  • 我已经更新了我的帖子。该查询正确吗?现在?我必须在我的 Sighting 课程中创建一个“计数”属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
相关资源
最近更新 更多