java - 如何使用jdbcTemplate为pojo类变量设置多行

标签 java spring jdbctemplate

我是 Spring 新手,我正在尝试使用 spring jdbcTemplate 从表中获取数据并设置为 pojo 类,如下代码所示,

@RequestMapping(value = "/getdevicedata/{macId}", method = RequestMethod.GET, produces = "application/json")
    @ResponseBody
    public DeviceAnalyse getDevicedata(@PathVariable String macId, HttpServletResponse response) throws Exception {
        DeviceAnalyse deviceAnalyse = new DeviceAnalyse();
        //List<DeviceAnalyse> deviceAnalyse = new ArrayList<>();
        if (!isValidMacId(macId)) {
            deviceAnalyse.setDId("Invalid device Id");
            return deviceAnalyse;

        }
        DeviceAnalyse temp = new DeviceAnalyse();
        try{
                    temp = new DeviceAnalyse();
                    String sql = "select value,serverTimeStamp,sensorType,percentage from tablename";
                    temp = (DeviceAnalyse)jdbcTemplate.queryForObject(sql, new Object[]{macId}, new BeanPropertyRowMapper(DeviceAnalyse.class));
                    deviceAnalyse.setPercentage(temp.getPercentage());
                    deviceAnalyse.setSensorType(temp.getSensorType());
                    deviceAnalyse.setServerTimeStamp(temp.getServerTimeStamp());
                    deviceAnalyse.setValue(temp.getValue());

        }
        catch(Exception e){
                    System.out.println(e);
                    e.printStackTrace();
                    deviceAnalyse.setPercentage(0L);
                    deviceAnalyse.setSensorType("");
                    deviceAnalyse.setServerTimeStamp(null);
                    deviceAnalyse.setValue(0L);
        }

        return deviceAnalyse;
    }

这里的DeviceAnalyse是我的pojo类,它有所有的getter setter。但我得到结果大小不正确:预期 1,实际 4

如何解决这个问题并将所有检索值设置为 pojo 类?喜欢

while(resultset.next())
{
   deviceAnalyse.setPercentage(temp.getPercentage());
   deviceAnalyse.setSensorType(temp.getSensorType());
   deviceAnalyse.setServerTimeStamp(temp.getServerTimeStamp());                                      
   deviceAnalyse.setValue(temp.getValue());
}

最佳答案

您在代码中犯了一个简单的错误。您应该调用jdbcTemplate.query而不是jdbcTemplate.queryForObject .

jdbcTemplate.queryForObject 预计结果中只有一行,因为 RowMapperResultSetExtractor初始化为 1 。相反 jdbcTemplate.query 返回所有行。

不要忘记更改您的 temp变量为List<DeviceAnalyse> .

调用jdbcTemplate可能看起来像这样:

List<DeviceAnalyse> temp = jdbcTemplate.query(sql, new Object[]{macId}, new BeanPropertyRowMapper(DeviceAnalyse.class));

关于java - 如何使用jdbcTemplate为pojo类变量设置多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33800019/

相关文章:

java - 组合字符串数组和迭代器并排序

java - 求封闭 GeneralPath 所包围的区域

java - 从仪表板注销导致错误 404 : requested resource not available

java - Spring boot & Spring security 总是重定向到 Login

java - 准备语句编译时间

java - 如何在方法中正确使用 boolean 值并打印结果

java - Mockito 使用 Mockito.mockStatic() 模拟静态 void 方法

Spring 上下文测试找不到配置位置

java - 如何正确地将 List 转换为我的对象类型的 ArrayList?

Spring jdbc 'select for update'