Bla*_*man 4 scala playframework slick
我正在使用带有光滑的Postgresql,我正在尝试执行以下操作:
sqlu"update table1 set column1 = column1 + 1 where id = $id returning column1".first
Run Code Online (Sandbox Code Playgroud)
我收到以下错误.基本上我想执行更新,然后返回返回的更新值.
错误:
[[SlickException: Update statements should not return a ResultSet]]
Run Code Online (Sandbox Code Playgroud)
还有另一种方法吗?看来你不允许用更新语句返回任何内容?(返回似乎类似于结果集,但它只是一个整数值).
从光滑的源代码看,如果它是更新,apply在检索值时,光滑在第52行的方法中抛出错误.
从staticQuery源,从处理更新查询的第35行,光滑传递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.它可以用于转换为任何复杂的对象.
| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |