【问题标题】:implicit conversion of RESULTSET for queries查询的 RESULTSET 隐式转换
【发布时间】:2013-10-08 09:19:07
【问题描述】:

我使用的是 Scala 2.10,但遇到了 Slick 问题(普通查询,java.sql.ResultSet)。如果我写像

这样的查询

Q.query[String, ResultSet](query).list(rs.getString("id"))

eclipse 会告诉我could not find implicit value for parameter rconv: scala.slick.jdbc.GetResult[java.sql.ResultSet]

我对这个问题最重要的来源 (http://slick.typesafe.com/doc/0.11.2/sql.html) 没有帮助。如何编写这些隐式转换?在 Slick 中是否有任何其他熟悉的表示 ResultSets 的方式?

【问题讨论】:

    标签: scala resultset implicit-conversion slick


    【解决方案1】:

    让我试着解释一下:)。在你有ResultSet 的地方,你应该有一个你实际将结果集映射到的类型。例如。将保存您的行的元组或案例类。如果是自定义(案例)类,您将必须提供一个 implicit GetResult 描述如何从 jdbc ResultSet 映射到您的类。 .list 的参数应该是您希望 Slick 放入准备好的语句的占位符的值,而不是您从 ResultSet 中得到的值(假设这是 rs 所代表的)。

    建议的用法是这样的:

    import scala.slick.jdbc.{GetResult, StaticQuery}
    import StaticQuery.interpolation
    
    val price = 1000.0
    
    // use tuples
    val expensiveDevices: List[Device] =
      Q.query[String, (Long,Double,Date)]("select * from DEVICE where PRICE > ?").list( price )
    
    // or a case class (needs implicit GetResult for Device)
    case class Device(id: Long,price: Double,acquisition: Date)
    implicit val getDeviceResult =
      GetResult(r => Device(r.<<, r.<<, r.<<))
    val expensiveDevices2: List[Device] =
      Q.query[String, Device]("select * from DEVICE where PRICE > ?").list( price )
    
    // or the even nicer interpolation syntax
    val expensiveDevices3: List[Device] =
      sql"select * from DEVICE where PRICE > $price"    .as[Device].list
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多