繁体   English   中英

JdbcTemplate.update()插入返回值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM