[使用带有浮点数的sql时如何返回列表[用户]

问题描述 投票:4回答:1

我似乎可以从原始SQL查询中获取如何返回列表[用户]。

implicit val getUserResult = GetResult(r => User(r.nextInt, ....))

sql"""
select * from users where id =1

""".as[User]

这似乎编译良好,但是如果我更改它以返回列表而不是单个结果,则会出错。

.as[List[User]]

错误:

could not find implicit value for parameter rconv: scala.slick.jdbc.GetResult[List[User]]

如何更改隐式GetResult以返回列表?

更新

所以我创建了隐式的像:

隐式val getUserResult = GetResult(r => User(r.nextInt,....))

val查询:StaticQuery0 [用户] = sql“ .....”

query.list()

我可以看到这个错误:

[PSQLException: Bad value for type int : asdf asdfs]

在psql中,我可以看到某些列中有“ asdf asdfs”,但没有INT列。如果一切正常,我不确定为什么会收到此错误,看起来像个错误?

scala playframework slick
1个回答
4
投票
正如@goral所说,由于您按ID进行过滤,您可能只会得到一行,不过您仍然可以轻松地获得一个列表:

import scala.slick.driver.JdbcDriver.backend.Database import Database.dynamicSession import scala.slick.jdbc.{GetResult, StaticQuery => Q} import Q.interpolation val t: StaticQuery0[User] = sql"select * from users where id = 1".as[User] val list: List[User] = t.list()

[StaticQuery具有所有常用方法,例如listfirstfirstOption等,因为它们是从Invoker特性继承的。

如果要使用自定义案例类并使用GetResult

case class User(id: Int, name: String) implicit val getUserResult = GetResult(r => User(r.nextInt, r.nextString)) val t: StaticQuery0[User] = sql"select * from adwords_ads where name = ".as[User] val list: List[User] = t.list()

编辑:

即使没有隐式映射器,它也对我有用,因为光滑的模式生成器已经为我生成了一个:

/** GetResult implicit for fetching SalesforceLogRow objects using plain SQL queries */ implicit def GetResultSalesforceLogRow(implicit e0: GR[Long], e1: GR[String], e2: GR[Int], e3: GR[java.sql.Timestamp], e4: GR[Option[java.sql.Timestamp]]): GR[myEntity] = GR { prs => import prs._ myEntity.tupled((<<[Long], <<[Long], <<[String], <<[Int], <<[java.sql.Timestamp], <<[Long], <<?[java.sql.Timestamp])) }

我通常在模式对象中拥有它,显然您没有它,而Slick不知道如何映射您的普通SQL。

0
投票
slick 3.0.0中没有StaticQuery,如何解决此问题?
© www.soinside.com 2019 - 2024. All rights reserved.