JDBC RowMapper和Casts

时间:2011-09-12 14:54:48

标签: java jdbc casting

我在使用带有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或其他内容像那样,通常它会尝试施放到所需的值。)

您有任何解释或想法可以解决这个问题吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您需要ParameterizedSingleColumnRowMapper.newInstance(Long.class)。直接创建一个新实例意味着它不能正确地知道类型(它不能从泛型中推断它,因为它们在编译时被擦除)所以它可能只是.getObject()它将受到JDBC驱动程序。