Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 为什么编译失败时会使用“quot;未找到:值用户“;?_Postgresql_Scala_Playframework 2.0_Slick - Fatal编程技术网

Postgresql 为什么编译失败时会使用“quot;未找到:值用户“;?

Postgresql 为什么编译失败时会使用“quot;未找到:值用户“;?,postgresql,scala,playframework-2.0,slick,Postgresql,Scala,Playframework 2.0,Slick,我想从默认数据库postgres中检索一行。我已经定义了表“用户” 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 m

我想从默认数据库
postgres
中检索一行。我已经定义了表“用户”

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))
  }
}
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
        }
    }
}
型号/用户。scala

package controllers

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

object Application extends Controller {

  def index = Action { 
    Ok(views.html.index(UsersDatabase.getAll))
  }
}
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
        }
    }
}

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

编译错误消息说明了一切-范围中没有可供用户使用的值

将对象
UsersDatabase
更改为如下所示:

object UsersDatabase {

    val users = TableQuery[Users]

    def getAll: List[User] = {
        Database.forDataSource(DB.getDataSource()) withSession { implicit session =>
            users.list
        }
    }
}
由于使用本地
val用户
在数据库中列出用户,因此错误消失

如Slick
session
的官方文档中所述,val是一个隐式值(如
最终def列表(隐式会话:SessionDef):list[R]
),因此块中的
隐式会话

所有执行查询的方法都采用隐式会话值。属于 当然,如果愿意,也可以显式传递会话:

val l = q.list(session)

谢谢你的大力支持,非常感谢。但是运行此命令会给我进一步的错误
[error]发现:play.api.mvc.Result[error]必需:slick.driver.PostgresDriver.backend.Session=>play.api.mvc.Result[error](扩展为)slick.driver.PostgresDriver.backend.SessionDef=>play.api.mvc.Result[error]确定(views.html.index(UsersDatabase.getAll))[错误]^[错误]发现一个错误[错误](编译:编译)编译失败[错误]应用程序-
index.scala.html
@(用户:列表[用户])编译了什么?我想把它添加到答案中。这是我愚蠢的错误,再次在controller:def index=Action{database.forDataSource(DB.getDataSource())和session{…Ok(views.html.index(UsersDatabase.getAll))}中用数据库会话包装结果。我问这个问题时没有这样做。你的编辑和回答完全正确。