2014-01-16 284 views
6

JdbcTemplate.update()返回受影响的行数 - 因此您不仅知道删除/更新已成功,还知道有多少行被删除/更新。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); 

回答

1

是,从理论上讲,你应该得到0或1,但是如果没有行被插入时,它会是因为一个错误,所以DataAccessException会被抛出,这是你将如何知道出事了并没有创建行。

+0

实际上,在考虑它时,也会出现数据截断警告和抛出异常的情况,但该行将被保存,因此计数应为1。 – Turophile

0

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

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

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

的@Transactional也可以添加到类为好,但我会read up more on it如果你有兴趣在实现此功能。 tx上有很多很好的文档。

作为一个便笺,我不建议对你的方法的调用者说谎。如果您调用一个名为“update”的方法,请运行一个将更新记录的查询,如果要插入/创建新记录,请创建或调用一个将新记录“插入”表的方法 - 插入如果主键是唯一的,则重复记录不会起作用。

1

正如我们所知,jdbctemplate.update将以整数格式返回。 ,以便找到0或1只是这样做如下简单的代码

int i=jdbctemplate.update(.your db call..); 

它将返回1成功,0失败情况下的话,根据它,你可以处理你的逻辑。