我想从我的默认数据库中检索一行。我已经定义了“用户”表。
conf/application.conf文件

db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost:5234/postgres"
db.default.user="postgres"
db.default.password=""

控制器/应用程序.scala
package controllers

import models.{UsersDatabase, Users}
import play.api.mvc._

object Application extends Controller {

  def index = Action {
    Ok(views.html.index(UsersDatabase.getAll))
  }
}

模型/用户.scala
package models

import java.sql.Date
import play.api.Play.current
import play.api.db.DB
import slick.driver.PostgresDriver.simple._

case class User(
    id: Int,
    username: String,
    password: String,
    full_name: String,
    email: String,
    gender: String,
    dob: Date,
    joined_date: Date
)

class Users(tag: Tag) extends Table[User](tag, "Users") {

    def id = column[Int]("id")
    def username = column[String]("username", O.PrimaryKey)
    def password = column[String]("password")
    def full_name = column[String]("full_name")
    def email = column[String]("email")
    def gender = column[String]("gender")
    def dob = column[Date]("dob")
    def joined_date = column[Date]("joined_date")
    def * = (id, username, password, full_name, email, gender, dob, joined_date) <> (User.tupled, User.unapply)
}

object UsersDatabase {

    def getAll: List[User] = {
        Database.forDataSource(DB.getDataSource()) withSession {
            Query(Users).list
        }
    }
}

当访问postgres时,它会给出编译错误:
[error] .../app/models/Users.scala:36: not found: value Users
[error]             Query(Users).list
[error]                   ^
[error] one error found
[error] (compile:compile) Compilation failed

如何解决此错误并正确访问数据?

最佳答案

编译错误消息说明一切-在作用域中没有要使用的值Users
将对象UsersDatabase更改为如下所示:

object UsersDatabase {

    val users = TableQuery[Users]

    def getAll: List[User] = {
        Database.forDataSource(DB.getDataSource()) withSession { implicit session =>
            users.list
        }
    }
}

由于您使用本地val users来列出数据库中的用户,所以错误消失了。
正如Slicksessionval的官方文档中的Querying所述,val是list(Asfinal def list(implicit session: SessionDef): List[R])的隐式值,因此在块中implicit session
执行查询的所有方法都采用隐式会话值。的
当然,如果您愿意,也可以显式地传递会话:
val l = q.list(session)

关于postgresql - 为什么编译失败并显示“找不到:有值(value)的用户”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27885366/

10-14 13:34
查看更多