[英]JdbcTemplate.update() insert return values
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);
是的,理论上你应该得到0或1,但是如果没有插入行,那将是由于一个错误,所以会抛出一个DataAccessException
,这就是你怎么知道出错了什么并且没有创建行的方法。
要回答你的问题,是的,正如@Turophile指出的那样,你可以从方法签名 (它返回一个int)中得到一个0或1的响应。
响应@Turophile 评论 (抱歉,我无法添加评论:/),为了避免这种情况并避免将部分数据保存到数据库,请使用Springs Transaction Management(tx)。 这将允许您基于特定异常或Exception类中的所有异常回滚事务。 请注意,默认情况下,@ Rollback 仅回滚运行时的事务, 仅检查未经检查的异常。
@Transactional(rollbackFor = Exception.class)
public Employee updateEmployee(Employee pEmployee) { ... }
@Transactional也可以添加到类中,但如果您对实现此功能感兴趣,我会阅读更多内容 。 关于tx有很多很好的文档。
作为旁注,我不建议对你的方法的来电者撒谎。 如果你调用一个说“更新”的方法,运行一个将更新记录的查询,如果你想插入/创建一个新记录,创建或调用一个方法将一个新的记录“插入”你的表 - 插入如果主键是唯一的,则重复记录无论如何都不会起作用。
我们知道jdbctemplate.update将以整数格式返回。 为了找到0或1,只需在简单的代码下执行此操作
int i=jdbctemplate.update(.your db call..);
它将返回1表示成功,0表示失败情况,因此,根据它,您可以处理您的逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.