gpt4 book ai didi

java - JdbcTemplate queryForInt/Long 在 Spring 3.2.2 中被弃用。应该用什么代替?

转载 作者:IT老高 更新时间:2023-10-28 11:26:41 30 4
gpt4 key购买 nike

JdbcTemplate 中的 queryforInt/queryforLong 方法在 Spring 3.2 中已弃用。我不知道为什么或什么被认为是使用这些方法替换现有代码的最佳做法。

一个典型的方法:

int rowCount = jscoreJdbcTemplate.queryForInt(
"SELECT count(*) FROM _player WHERE nameKey = ? AND teamClub = ?",
playerNameKey.toUpperCase(),
teamNameKey.toUpperCase()
);

好的,上面的方法需要改写如下:

Object[] params = new Object[] { 
playerNameKey.toUpperCase(),
teamNameKey.toUpperCase()
};
int rowCount = jscoreJdbcTemplate.queryForObject(
"SELECT count(*) FROM _player WHERE nameKey = ? AND teamClub = ?",
params, Integer.class);

显然,这种弃用使 JdbcTemplate 类更简单(或者是吗?)。 QueryForInt 一直是一种方便的方法(我猜)并且已经存在了很长时间。为什么被删除了。结果代码变得更加复杂。

最佳答案

我认为是有人意识到 queryForInt/Long 方法具有令人困惑的语义,也就是说,从 JdbcTemplate 源代码中您可以看到它当前的实现:

@Deprecated
public int queryForInt(String sql, Object... args) throws DataAccessException {
Number number = queryForObject(sql, args, Integer.class);
return (number != null ? number.intValue() : 0);
}

这可能会导致您认为如果结果集为空,它将返回 0,但是它会引发异常:

org.springframework.dao.EmptyResultDataAccessException: 结果大小不正确:预期为 1,实际为 0

所以下面的实现基本上等同于当前的实现:

@Deprecated
public int queryForInt(String sql, Object... args) throws DataAccessException {
return queryForObject(sql, args, Integer.class);
}

然后现在必须用丑陋的代码替换非弃用代码:

    queryForObject(sql, new Object { arg1, arg2, ...}, Integer.class);

或者这个(更好):

    queryForObject(sql, Integer.class, arg1, arg2, ...);

关于java - JdbcTemplate queryForInt/Long 在 Spring 3.2.2 中被弃用。应该用什么代替?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15661313/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com