JdbcTemplate.update()
返回受影响的行数-因此,您不仅知道删除/更新成功,还知道删除/更新了多少行。
如果我尝试插入一行,返回值是什么。
是否可以将返回值设为“0”?
private static final String insertSql =
"INSERT INTO employee (" +
" name, " +
" surname, " +
" title, " +
" created) " +
"VALUES (John, Smith, Software developer, new Date())";
int row = template.update(insertSql, params, types);
4条答案
按热度按时间bvn4nwqk1#
是的,理论上应该得到0或1,但如果没有插入行,则可能是由于错误,因此将抛出
DataAccessException
,这就是为什么您会知道出错了,没有创建行。ohfgkhjo2#
正如我们所知,jdbctemplate.update将以整数格式返回。为了找到0或1,只需执行以下简单代码
如果成功,它将返回1,如果失败,它将返回0,因此,根据它,您可以处理您逻辑。
s4n0splo3#
回答你的问题,是的,正如@Turophile指出的,你会得到一个0或1的响应,这可以从方法签名(返回一个int)中看出。
为了回应@Turophile comment(抱歉我不能添加注解:/),为了避免这种情况并避免部分数据被保存到数据库中,请使用Springs Transaction Management(tx)。这将允许您基于特定异常或Exception类中的所有异常回滚事务。请注意,默认情况下,@Rollback只回滚运行时未检查异常的事务****。
@Transactional也可以添加到类中,但是如果你对实现这个特性感兴趣的话,我会read up more on it。
顺便说一句,我不建议对方法的调用者撒谎。如果您调用一个写着“update”的方法,运行一个查询来更新记录,如果您想插入/创建一个新记录,创建或调用一个方法来“插入”一个新记录到您的表中--如果主键是唯一的,插入重复的记录无论如何都不会起作用。
moiiocjp4#
Spring jdbcTemplate类不提供“insert”方法,只提供查询和更新。