JdbcTemplate.update()插入返回值

时间:2014-01-16 23:01:18

标签: java spring-mvc db2 spring-jdbc jdbctemplate

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);

3 个答案:

答案 0 :(得分:1)

是的,理论上你应该得到0或1,但是如果没有插入行,那将是由于错误,所以会抛出DataAccessException,这就是你怎么会知道出了什么问题并且没有创建任何行。

答案 1 :(得分:1)

回答你的问题,是的,正如@Turophile所指出的那样,你可以从method signature(它返回一个int)中得到一个0或1的响应。

响应@Turophile comment(抱歉,我无法添加注释:/),为了避免这种情况并避免将部分数据保存到数据库,请使用Springs Transaction Management(tx)。这将允许您基于特定异常或Exception类中的所有异常回滚事务。请注意,默认情况下,@ Rollback会回滚运行时的事务,未经检查的例外

@Transactional(rollbackFor = Exception.class)
public Employee updateEmployee(Employee pEmployee) { ... }

@Transactional也可以添加到类中,但如果您对实现此功能感兴趣,我会read up more on it。关于tx有很多很好的文档。

作为旁注,我不建议对你的方法的来电者撒谎。如果你调用一个说“更新”的方法,运行一个将更新记录的查询,如果你想插入/创建一个新记录,创建或调用一个方法将一个新的记录“插入”你的表 - 插入如果主键是唯一的,则重复记录无论如何都不会起作用。

答案 2 :(得分:1)

jdbctemplate.update将以整数格式返回,如我们所知。 为了找到0或1,只需在简单代码下执行此操作

{{1}}

它会返回1表示成功,0表示失败情况,因此根据它你可以处理你的逻辑。