1

Scala 2.10 を使用していますが、Slick (プレーン クエリ、java.sql.ResultSet) に問題があります。次のようなクエリを書くと

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

日食が教えてくれる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 で s を表すおなじみの方法は他にありResultSetますか?

4

1 に答える 1

5

光を当てるようにしましょう:)。がある場合は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
于 2013-10-08T11:02:04.577 に答える