标签: play-slick

在Slick 2.0中插入后返回AutoInc ID

我已经到了地球的尽头寻找这个问题的答案.光滑的2.0没有太多信息.下面是我的地址模型的代码,如何在创建插入后让方法创建返回id?

package models
import play.api.Play.current
import play.api.db.slick.Config.driver.simple._
import play.api.db.slick.DB

    object Addresses{
      val DB_URL:String = "jdbc:h2:mem:fls-play"
      val DB_driver:String = "org.h2.Driver"
      class Addresses(tag: Tag) extends Table[(String, String, String, String, String)](tag, "ADDRESSES"){
       def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
       def city = column[String]("CITY")
       def stateName = column[String]("STATE_NAME")
       def street1 = column[String]("STREET1")
       def street2 = column[String]("STREET2")
       def zip = column[String]("ZIP")

       def * = (city, stateName, street1, street2, zip)
      }
      val addresses = TableQuery[Addresses]

      def create(city:String, stateName:String, street1:String, street2:String, zip:String) {
        DB.withSession{ implicit session =>
           addresses …
Run Code Online (Sandbox Code Playgroud)

scala playframework-2.0 slick play-slick

25
推荐指数
1
解决办法
8562
查看次数

如何使用Guice DI和Slick运行ScalaTest?

我不知道如何以GuiceApplicationBuilder这种方式配置,我能够加载需要DatabaseConfigProvider注入的控制器.

我想指定一个替代的postgres数据库用于测试,或者在内存数据库中指定(如果可能的话).

class   User
extends MySpecs
with    OneAppPerTest
{
    override def newAppForTest( testData: TestData ) = new GuiceApplicationBuilder()
        // Somehow bind a database here, I guess?
        .build()

    "A test" should "test" in
    {
        val result = Application.instanceCache[api.controller.User]
            .apply( app )
            .list()( FakeRequest() )

        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪

[info] - should return an entity *** FAILED ***
[info]   com.google.inject.ConfigurationException: Guice configuration errors:
[info] 
[info] 1) No implementation for play.api.db.slick.DatabaseConfigProvider was bound.
[info]   while locating …
Run Code Online (Sandbox Code Playgroud)

scala guice playframework slick play-slick

23
推荐指数
1
解决办法
3106
查看次数

使用Play 2和Slick-Play配置Postgresql连接

我正在学习如何使用Scala和Play 2 Framemork构建应用程序.我使用激活工具创建了一个新项目,基于"play-scala-intro"当前模板.

该模板有一个使用Play-Slick 1.0管理依赖关系的示例应用程序,并配置了H2 DB,可以正常工作.

当我尝试更改为Postgres DB时,我遇到了麻烦.我收到错误500,告诉我:

"无法连接到数据库[默认]".

在堆栈跟踪中,例外是:

"已配置的Slick驱动程序org.postgresql.Driver不是请求的配置文件slick.profile.BasicProfile的实例"

那么......我已经做了什么:

我在build.sbt文件中添加了依赖项:

"org.postgresql"%"postgresql"%"9.4-1201-jdbc41"

在我的配置文件(application.conf)中,数据库连接配置为:

slick.dbs.default.driver = org.postgresql.Driver slick.dbs.default.db.url ="jdbc:postgresql:// localhost:5432/hello_play"slick.dbs.default.db.user ="postgres"slick .dbs.default.db.password = ""

PS:我也试过过slick.dbs.default.driver ="org.postgresql.Driver"......

PS2:我的db密码为空.我正在与PgAdmin连接而没有任何问题

database postgresql scala slick play-slick

12
推荐指数
1
解决办法
4954
查看次数

Play/Slick:SQLTimeoutException:等待连接1001ms后的超时

我用PostgreSQL 9.4数据库创建了一个空的(激活模板play-scala)Play 2.4.3应用程序并尝试使用Slick 3.1.0,但是它引发了一个错误:

play.api.UnexpectedException: Unexpected exception[SQLTimeoutException: Timeout after 1000ms of waiting for a connection.]
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:165) ~[play-server_2.11-2.4.3.jar:2.4.3]
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:121) ~[play-server_2.11-2.4.3.jar:2.4.3]
    at scala.Option.map(Option.scala:146) ~[scala-library-2.11.7.jar:na]
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:121) ~[play-server_2.11-2.4.3.jar:2.4.3]
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:119) ~[play-server_2.11-2.4.3.jar:2.4.3]
    at scala.util.Success.flatMap(Try.scala:231) ~[scala-library-2.11.7.jar:na]
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:119) ~[play-server_2.11-2.4.3.jar:2.4.3]
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:111) ~[play-server_2.11-2.4.3.jar:2.4.3]
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library-2.11.7.jar:na]
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) ~[akka-actor_2.11-2.3.13.jar:na]
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) ~[akka-actor_2.11-2.3.13.jar:na]
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) ~[scala-library-2.11.7.jar:na]
Caused by: java.sql.SQLTimeoutException: Timeout after 1000ms of waiting for a connection.
    at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:227) ~[HikariCP-java6-2.3.7.jar:na]
    at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:182) ~[HikariCP-java6-2.3.7.jar:na] …
Run Code Online (Sandbox Code Playgroud)

postgresql playframework slick play-slick playframework-2.4

11
推荐指数
1
解决办法
5312
查看次数

Scala,Play Framework Slick问题 - 无法找到参数rconv的隐含值

我正在遵循Slick文档的指导原则,我不明白我在做错了什么:

package models

import scala.slick.session.Database
import Database.threadLocalSession
import scala.slick.jdbc.{GetResult, StaticQuery => Q}
import javax.sql.DataSource
import Q.interpolation

object Data {

    case class User(user: String, password: String)

    lazy val db = Database.forName("default")

    def result: Option[User] = {
        db.withSession {
            sql"SELECT user, password FROM user WHERE user = 'user' AND password = 'pass'".as[User]
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这条线

sql"SELECT user, password FROM user WHERE user = 'user' AND password = 'pass'".as[User]
Run Code Online (Sandbox Code Playgroud)

给我这个:

Multiple markers at this line
    - could not find implicit …
Run Code Online (Sandbox Code Playgroud)

scala playframework playframework-2.0 slick play-slick

10
推荐指数
1
解决办法
5313
查看次数

播放2.4 - Slick 3.0.0 - DELETE无法正常工作

我正在尝试升级到Slick 3.0.0和Play 2.4(Scala),但删除行无效.在下面的代码中,一切正常:查询所有行,插入和更新 - 除了删除.

package dao

import scala.concurrent.Future
import models._
import models.Tables._
import play.api.Play
import play.api.db.slick.DatabaseConfigProvider
import play.api.db.slick.HasDatabaseConfig
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import slick.driver.JdbcProfile

class UserDAO extends HasDatabaseConfig[JdbcProfile] {
  protected val dbConfig =  DatabaseConfigProvider.get[JdbcProfile](Play.current)

  import driver.api._

  def all(): Future[List[UserRow]] = db.run(Tables.User.result).map(_.toList)

  def findByEmail(email: String): Future[Option[UserRow]] = {
    db.run(Tables.User.filter(_.email === email).result.headOption)
  }

  def update(id: Int, newData: UserRow): Future[Int] = {
    db.run(Tables.User.filter(_.id === id).update(newData))
  }

  def delete(id: Int): Future[Int] = {
    db.run(Tables.User.filter(_.id === id).delete)
  }

}
Run Code Online (Sandbox Code Playgroud)

该代码生成以下编译错误:

value delete is not …
Run Code Online (Sandbox Code Playgroud)

mysql scala playframework slick play-slick

9
推荐指数
1
解决办法
1736
查看次数

在命令行中运行Evolutions

这是我修改Play框架的第一天,我在进化方面遇到了困难.我正在使用Play 2.4.

我从上来的许多选择了一个示例应用程序activator ui,它使用play-slickplay-slick-evolutions用于数据库连接和演进.

我已经仔细阅读了文档,但我似乎找不到从命令行运行演变的方法.当我activator在bash上运行时,我会被抛入一个shell中,并且help没有提出任何关于运行evolution或浮油的信息.

我已经做了一段时间的PHP,所以我习惯于从命令行上/下运行它们.我可以从数据库客户端删除表,activator run这应该提示我运行演进,但我正在寻找正确的手动方式来执行此操作.我想这是可能的,因为它需要在部署时完成.

play-slick playframework-2.4

9
推荐指数
1
解决办法
3875
查看次数

在ScalaTest中注入PlaySlick数据库连接

我有以下使用PlaySlick连接到数据库的DAO.该类有一个read我需要使用ScalaTest测试的方法.我的问题是我不知道如何模拟DatabaseConfigProviderUsersDAO类中注入它并测试read方法.这是要测试的类:

class UsersDAO @Inject()(@NamedDatabase("mydb") 
          protected val dbConfigProvider: DatabaseConfigProvider)
          extends with HasDatabaseConfigProvider[JdbcProfile] {

   import driver.api._

   val db1 = dbConfigProvider.get[JdbcProfile].db

   def read (sk: Int) = {
      val users = TableQuery[UserDB]
      val action = users.filter(_.sk === sk).result
      val future = db1.run(action.asTry)
      future.map{
        case Success(s) => 
          if (s.length>0)
            Some(s(0))
          else
            None
        case Failure(e) => throw new Exception ("Failure: " + e.getMessage)
      }
   }

}
Run Code Online (Sandbox Code Playgroud)

这是我尝试编写测试:

class UserDAOTest extends PlaySpec with OneAppPerSuite  {

  implicit override lazy val …
Run Code Online (Sandbox Code Playgroud)

scala scalatest playframework slick play-slick

9
推荐指数
1
解决办法
945
查看次数

如何在play-framework中运行测试时应用play-evolutions?

使用play框架运行测试时,我遇到了进化问题

  • 用于scala的playframework v2.6.6
  • play-slick v3.0.2
  • play-slick-evolutions v3.0.2

测试看起来像这样:

class TestFooController extends PlaySpec with GuiceOneServerPerSuite {
  "foo endpoint should store some data" in {
    val wsClient = app.injector.instanceOf[WSClient]
    val url = s"http://localhost:$port/foo"
    val requestData = Json.obj("foo" -> "bar")
    val response = await(wsClient.url(url).post(requestData))
    response.status mustBe OK
  }
}
Run Code Online (Sandbox Code Playgroud)

数据库配置如下所示:

slick.dbs.default.driver="slick.driver.H2Driver$"
slick.dbs.default.db.driver="org.h2.Driver"
slick.dbs.default.db.url="jdbc:h2:mem:play"
Run Code Online (Sandbox Code Playgroud)

假设有一个创建表的进化脚本,foos这个脚本在开发模式下工作正常.

运行测试时,抛出以下错误:

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[JdbcSQLException: Table "foos" not found;

foos无法找到该表,因此我假设尚未应用数据库演变.

然后我将数据库配置更改为在开发模式下使用的postgresql.

slick.dbs.default.driver = "slick.driver.PostgresDriver$"
slick.dbs.default.db.driver = "org.postgresql.Driver"
slick.dbs.default.db.url = "jdbc:postgresql://localhost:5432/foo-test"
slick.dbs.default.db.user = "user"
slick.dbs.default.db.password = "password"
Run Code Online (Sandbox Code Playgroud)

使用此配置,测试工作正常,数据存储在数据库中,因此数据库演进运行得很好. …

scala playframework playframework-evolutions play-slick playframework-2.6

9
推荐指数
1
解决办法
855
查看次数

使用SecureSocial进行播放:在单独的线程池中运行DB IO

我有一个Play 2.2.1应用程序,它使用play-slick 0.5.0.8将数据持久保存到Postgresql后端,而SecureSocial 2.1.2则用于处理用户授权.

由于播放光滑的事务是阻塞的,我slick-context在我的/conf/application.conf文件中创建了一个单独的执行上下文,根据插件的Wiki中的说明:

play {
  akka {
    actor {
      slick-context = {
        fork-join-executor {
          parallelism-min = 300
          parallelism-max = 300
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这允许我创建一个在单独的执行上下文中运行的控制器Action,并且不会阻止默认线程池中的线程.例如./app/controllers/Application.scala:

示例一 - 使用play-slick的DBAction:

import play.api.db.slick._
object Application extends Controller{ 

  // this controller Action won't block threads in the default pool since DBAction uses my separate slick-context execution context
  def recipes = DBAction { implicit rs =>
    val recipes  = Query(Recipes).list …
Run Code Online (Sandbox Code Playgroud)

scala playframework securesocial play-slick playframework-2.2

8
推荐指数
1
解决办法
1301
查看次数