加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 使用sqlu语句中的返回,slicekexception返回更新列的内

发布时间:2020-12-16 18:08:05 所属栏目:安全 来源:网络整理
导读:我正在使用带有光滑的 Postgresql,我正在尝试执行以下操作: sqlu"update table1 set column1 = column1 + 1 where id = $id returning column1".first 我收到以下错误.基本上我想执行更新,然后返回返回的更新值. 错误: [[SlickException: Update statement
我正在使用带有光滑的 Postgresql,我正在尝试执行以下操作:

sqlu"update table1 set column1 = column1 + 1 where id = $id returning column1".first

我收到以下错误.基本上我想执行更新,然后返回返回的更新值.

错误:

[[SlickException: Update statements should not return a ResultSet]]

还有另一种方法吗?看来你不允许用更新语句返回任何内容? (返回似乎类似于结果集,但它只是一个整数值).

解决方法

从光滑的 source开始,看起来如果它是更新,在检索值时,在第52行的apply方法中抛出一个错误.

从staticQuery源,从处理更新查询的第35行开始,slick将GetResult.GetUpdateValue传递给rconv,rconv调用apply方法,如果更新查询返回值,则会导致错误.

作为一种变通方法,您可以使用预准备语句直接获取ResultSet并自行处理,如:

private val updateQuery = "update test set name = 'mohitttttt' where id = ? returning name"
db.withSession { implicit session =>
      session.withPreparedStatement(updateQuery) { ps =>
      ps.setInt(1,1)
      val rsetIterator = new ResultSetIterator[String](ps.executeQuery(),rset =>   rset.getString(1))
      rsetIterator.toList.head
}

ResultSetIterator是一个处理resultSet的简单类

class ResultSetIterator[T](rset: ResultSet,mapper: ResultSet => T) extends Iterator[T] {
  def hasNext = rset.next
  def next: T = {
    mapper(rset)
  }
}

mapper函数告诉如何处理ResultSet以获取所需的对象.上面,它用于将ResultSet转换为String.它可以用于转换为任何复杂的对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读