【问题标题】:JdbcTemplate.update() insert return valuesJdbcTemplate.update() 插入返回值
【发布时间】:2014-01-16 23:01:17
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 其实仔细想想,也有这样的情况,你有数据截断警告,抛出异常,但是会保存行,所以计数应该是1。跨度>
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      作为旁注,我不建议对您的方法的调用者撒谎。如果您调用一个显示“更新”的方法,请运行一个将更新记录的查询,如果您想插入/创建一条新记录,请创建或调用一个将新记录“插入”到您的表中的方法——插入如果主键是唯一的,则重复记录无论如何都不起作用。

      【讨论】:

        【解决方案4】:

        Spring jdbcTemplate 类不提供“插入”方法,仅提供查询和更新。

        【讨论】:

        • 还有一些方法可以使用 jdbcTemplate 进行插入。查看其他人的答案。
        • 谢谢。我正在这样做。它是我们将 Java 用于 AWS lambda 和 api 网关的绝佳工具。
        猜你喜欢
        • 2013-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多