我在使用带有JDBC的RowMappers时遇到问题(特别是ParameterizedSingleColumnRowMapper
):
我正在使用以下内容查询数据库中的现有ID列表:
List<Long> existingIds = DS.getJdbcTemplate().query(sql,
new ParameterizedSingleColumnRowMapper<Long>());
唯一的问题是我的列表有时不包含预期的长时间:
// for some value...
System.out.println(existingIds.get(0) instanceof Long); // return FALSE
System.out.println((Object)existingIds.get(0) instanceof Integer); // return TRUE
我可以浏览existingIds
并将值重新转换为long
,但我希望行映射器可以执行此操作(我猜ParameterizedSingleColumnRowMapper
正在使用getLong
或其他内容像那样,通常它会尝试施放到所需的值。)
您有任何解释或想法可以解决这个问题吗?
提前感谢您的帮助。
答案 0 :(得分:2)
您需要ParameterizedSingleColumnRowMapper.newInstance(Long.class)
。直接创建一个新实例意味着它不能正确地知道类型(它不能从泛型中推断它,因为它们在编译时被擦除)所以它可能只是.getObject()
它将受到JDBC驱动程序。