可以平滑删除/更新数据库查询作为结果返回负整数值

问题描述

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

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

例如,如果找不到删除的请求ID,则上述slcik查询将返回0。另外,如果删除了任何行,它将返回等于删除行的正值。

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

解决方法

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

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

,

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

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

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

但是,对此有一些评论:

  • 我不确定如果查询返回的结果多于Integer.MAX_INT,该怎么办?您显示的查询可能不太可能。

  • JDBC API确实允许getUpdateCount调用中的-1,但是要获得该信息,您需要做一些低级的操作(比您的示例要低)。>