gpt4 book ai didi

scala - 使用在 sqlu 语句中返回什么来返回更新的列,slickexception

转载 作者:行者123 更新时间:2023-12-03 22:47:19 25 4
gpt4 key购买 nike

我正在使用 slick 的 Postgresql,我正在尝试执行以下操作:

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

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

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

有没有另一种方法可以做到这一点?似乎您不允许使用更新语句返回任何内容? (返回似乎类似于结果集,但它只是一个整数值)。

最佳答案

来自圆滑的 source ,看起来如果是更新,slick 在apply 中抛出错误方法在第 52 行检索值。

来自 staticQuery源代码,从处理更新查询的第 35 行开始,slick 传递了 GetResult.GetUpdateValue到 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。它可用于转换为任何复杂对象。

关于scala - 使用在 sqlu 语句中返回什么来返回更新的列,slickexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27179418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com