Scala 更新查询的 Slick 3 不起作用

Slick 3 for scala update query not functioning

首先我想声明我是 slick 的新手,我使用的是 3.1.1 版。我一直在阅读手册,但无法使我的查询正常工作。要么我的连接字符串有问题,要么我的 Slick 代码有问题。我从这里 http://slick.typesafe.com/doc/3.1.1/database.html and my update example from here bottom of page http://slick.typesafe.com/doc/3.1.1/queries.html 得到了我的配置。好的,这是我的代码

应用程序配置。

mydb= {
  dataSourceClass = org.postgresql.ds.PGSimpleDataSource
  properties = {
    databaseName = "Jsmith"
    user = "postgres"
    password = "unique"
  }
  numThreads = 10
}

My Controller -- 调用数据库table - relations

package controllers
import play.api.mvc._
import slick.driver.PostgresDriver.api._

class Application extends Controller {

  class relations(tag: Tag) extends Table[(Int,Int,Int)](tag, "relations") {
    def id = column[Int]("id", O.PrimaryKey)
    def me = column[Int]("me")
    def following = column[Int]("following")
    def * = (id,me,following)

  }

  val profiles = TableQuery[relations]

  val db = Database.forConfig("mydb")


  try {
    // ...
  } finally db.close()




  def index = Action {

    val q = for { p <- profiles if p.id === 2 } yield p.following
    val updateAction = q.update(322)
    val invoker = q.updateStatement
    Ok()
  }

}

我上面的代码可能有什么问题?我有一个使用纯 JDBC 的单独项目,此配置非常适合它

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

你还没有运行你的行动。 db.run(updateAction) 分别执行您的查询和您对数据库的操作(未测试):

def index = Action.async {
  val q = for { p <- profiles if p.id === 2 } yield p.following
  val updateAction = q.update(322)

  val db = Database.forConfig("mydb")
  db.run(updateAction).map(_ => Ok())
}

db.run()returns一个Future最终会完成。然后它被简单地映射到一个 Result in play.

另一方面,

q.updateStatement 只会生成一个 sql 语句。这在调试时很有用。

查看我项目中的代码:

def updateStatus(username: String, password: String, status: Boolean): Future[Boolean] = {
  db.run(
    (for {
      user <- Users if user.username === username
    } yield {
      user
    }).map(_.online).update(status)
  }