【问题标题】:Can Slick Delete/Update DB Query return Negative Integer Values as the result是否可以 Slick 删除/更新数据库查询返回负整数值作为结果
【发布时间】:2021-01-11 10:38:28
【问题描述】:

通常,当我们执行 Scala Slick 删除/更新查询时,如果由于找不到所需的 id 而删除/更新不成功,它会返回 0。 另一方面,如果删除/更新成功,它将返回受删除/更新操作影响的行数。

  override def deletePerson(id: Long): Future[Int] = {
    db.run(personQuery.filter(_.id === id).delete)
  }

例如,如果未找到要删除的请求的 id,则上述 slcik 查询将返回 0。此外,如果删除任何行,它将返回等于已删除行的正值。

我需要知道的是,scala slick 中的删除/更新结果是否会返回负值(例如:-1)。因为我需要根据返回结果进行验证。

【问题讨论】:

    标签: database scala slick


    【解决方案1】:

    这是受影响的行数,所以我对此表示怀疑。如果您的查询有任何错误,它将返回错误而不是负数。

    不过,我不建议使用 != 0 之类的方法来检查查询是否成功。 result > 0 会更好,但最好是另一个实际验证某些内容的查询,您在与插入/更新相同的事务中运行。

    【讨论】:

      【解决方案2】:

      您不会从该查询中看到 -1。

      Slick 在较低级别使用称为 JDBC 的 API。它定义了更新和删除语句的结果。您可以查看规范以查看在该级别从 executeUpdate 返回的结果。您可以在以下位置找到规范:https://www.jcp.org/en/jsr/detail?id=221

      API 由您的数据库的驱动程序实现。该驱动程序将符合规范。

      然而,这方面有几个 cmets:

      • 如果您的查询返回的结果超过Integer.MAX_INT,我不确定会发生什么。您显示的查询可能不太可能。

      • JDBC API 确实允许来自 getUpdateCount 调用的 -1,但要获得它,您需要做一些低级别的事情(低于您的示例)。

      【讨论】:

        猜你喜欢
        • 2010-09-22
        • 2015-11-20
        • 2013-02-01
        • 2021-09-16
        • 1970-01-01
        • 2012-10-21
        • 1970-01-01
        • 1970-01-01
        • 2017-12-31
        相关资源
        最近更新 更多