我正在使用 Jdbc 模板
从数据库中检索一个 Bean。这是我的方法:
public List<trackerv3Livedata> getTrackerData() {
return List<trackerv3Livedata> live = (List<trackerv3Livedata>) jdbcTemplate.queryForList("select * from mmitrackerv3_livedata where accountid =?",new Object[]{aid}, trackerv3Livedata.class);
}
跟踪v3活数据豆结构如下:
public class trackerv3Livedata implements Serializable {
private static final long serialVersionUID = 2409168269491619888L;
private int deviceid;
private Long timestamp;
private Mmitrackerv3Device mmitrackerv3Device;
private Mmitrackerv3Account mmitrackerv3Account;
private double latitude;
private double longitude;
private Double altitude;
private Double speedkph;
private Double heading;
private Double gpssignal;
private Integer geozoneid;
private Double distancekm;
private Double gsmsignal;
private Double mainpower;
private Integer laststatustime;
private Double internalbattry;
private Double temperature;
private Short dinput1;
private Short dinput2;
private Short dinput3;
private Short dinput4;
private Short dinput5;
private Short dinput6;
private Short dinput7;
private Short dinput8;
private Short ainput1;
private Short ainput2;
private Short ainput3;
private Short ainput4;
private Short doutput1;
private Short doutput2;
private Short doutput3;
private Short doutput4;
/* There are Some Getter And Setter Method With Constructor */
}
在我的场景中,完全有可能不会命中我的查询,所以我的问题是如何绕过以下错误消息。
org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: expected 1, actual 38
在我看来,我应该返回一个null,而不是抛出一个异常。我怎样才能解决这个问题?提前谢谢。
实现Bean RowMapper接口和maprow函数解决了这个问题
public class Mmitrackerv3LivedataMapper implements RowMapper<Mmitrackerv3Livedata> {
@Override
public Mmitrackerv3Livedata mapRow(ResultSet rs, int rowNum)
throws SQLException {
}
现在我有了JDBC模板中的更改
List<Mmitrackerv3Livedata> live = jdbcTemplate.query("select * from mmitrackerv3_livedata mlive " +
"join mmitrackerv3_device mdevice on mlive.accountid = mdevice.accountid where mlive.accountid = " +
aid, new Mmitrackerv3LivedataMapper());
谢谢@abhishek
发生这种情况是因为您使用的queryForList方法不支持多列。查看JdbcTemplate中queryForList的实现
public <T> List<T> More ...queryForList(String sql, Object[] args, Class<T> elementType) throws DataAccessException
{
return query(sql, args, getSingleColumnRowMapper(elementType));
}
方法创建一个新的行映射器,用于从单个列读取结果对象。您可以改用下面给出的方法。
public <T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper) throws DataAccessException
{
return query(sql, args, new RowMapperResultSetExtractor<T>(rowMapper));
}
JdbcTemplate方法
queryForList(String sql, Class<T> elementType)
对于单列查询很有用,您只能指定列类型。如果您需要在结果集中使用多个列,则使用该列会更准确
query(String sql, RowMapper<T> rowMapper)
作为RowMapper的实现,您可以使用自己的,或
jdbcTemplate.query(sql, new BeanPropertyRowMapper<T>(clazz));
所以在你的情况下,它可能是:
java prettyprint-override">public List<Trackerv3Livedata> getTrackerData() {
String sql = "SELECT * FROM mmitrackerv3_livedata mlive " +
"JOIN mmitrackerv3_device mdevice ON mlive.accountid = " +
"mdevice.accountid WHERE mlive.accountid = " + aid;
return jdbcTemplate.query(sql,
new BeanPropertyRowMapper<Trackerv3Livedata>(Trackerv3Livedata.class));
}
我在测试环境方面工作。
当我提交复制数据时,我出现了以下错误,这里是代码… 和DAO类。 这个错误来了,任何人都可以帮助解决这个问题。
我正在使用cassandra 3.11.11。它运行良好,但现在当我在下面运行查询时显示此错误。重要的是要说应用程序中没有任何变化。
这是我的DAO代码 这是我的控制器代码 这就是错误 消息请求处理失败;嵌套异常为org。springframework。道。IncorrectResultSizeDataAccessException:结果大小不正确:预期为1,实际为10
我使用Jdbctemplate从数据库中检索单个字符串值。以下是我的方法。 在我的场景中,查询完全可能不被击中,所以我的问题是如何绕过以下错误消息。 在我看来,我应该返回一个空值,而不是抛出一个异常。我怎么才能修好这个?提前谢了。
我已经构建了一个简单的登录页面,其中使用用户提供的用户名从数据库中获取所需的行,并根据用户提供的值检查凭据。 我面临的问题是,如果用户输入数据库中不存在的用户名值,我将面临此错误 org.springframework.dao.EmptyResultDataAccess异常: 不正确的结果大小: 预期的 1, 实际的 0 这意味着我的数据库没有任何具有所需用户名的行。 代码: 索引页: 用户道(其