Scala/Slick普通SQL:以映射形式检索结果

Scala/Slick普通SQL:以映射形式检索结果,scala,playframework,playframework-2.0,slick,play-slick,Scala,Playframework,Playframework 2.0,Slick,Play Slick,我有一个简单的方法,可以通过单击纯SQL方法从数据库检索用户: object Data { implicit val getListStringResult = GetResult[List[String]] ( prs => (1 to prs.numColumns).map(_ => prs.nextString).toList ) def getUser(id: Int): Option[List[String]] = DB.with

我有一个简单的方法,可以通过单击纯SQL方法从数据库检索用户:

object Data {

    implicit val getListStringResult = GetResult[List[String]] (
        prs => (1 to prs.numColumns).map(_ => prs.nextString).toList
    )

    def getUser(id: Int): Option[List[String]] = DB.withSession {
        sql"""SELECT * FROM "user" WHERE "id" = $id""".as[List[String]].firstOption
    }

}
结果是
List[String]
,但我希望它类似于
Map[String,String]
——列名和值对映射。这可能吗?如果是,怎么做

我的堆栈是Play Framework 2.2.1、Slick 1.0.1、Scala 2.10.3、Java 8 64位

import Scala.Slick.jdbc.meta_
import scala.slick.jdbc.meta._
val columns = MTable.getTables(None, None, None, None)
                    .list.filter(_.name.name == "USER") // <- upper case table name
                    .head.getColumns.list.map(_.column)
val user = sql"""SELECT * FROM "user" WHERE "id" = $id""".as[List[String]].firstOption
                                                         .map( columns zip _ toMap )
val columns=MTable.getTables(无,无,无,无)
.list.filter(u.name.name==“USER”)/可以在不查询表元数据的情况下执行此操作,如下所示:

   implicit val resultAsStringMap = GetResult[Map[String,String]] ( prs => 
      (1 to prs.numColumns).map(_ => 
         prs.rs.getMetaData.getColumnName(prs.currentPos+1) -> prs.nextString
      ).toMap
   )

也可以用同样的方法构建地图[字符串,任意],但这显然更复杂。

谢谢,它似乎起作用了,尽管我可以理解为什么我自己没有弄明白它-我不认为它可能那么复杂…没有关于此功能的文档,但您可以在中找到用法:和