2016-12-17 11 views
2

: Ich bin in slick, bitte diesen einfachen Code anzuzeigen:scala Slick postgresql erstellen Tabellenschema

import slick.driver.PostgresDriver.api._ 
import slick.lifted.{ProvenShape, Tag} 

case class Person(id: Int, name: String) 

class Persons(tag: Tag) extends Table[Person](tag, "persons") { 

    val id: Rep[Int] = column[Int]("id", O.PrimaryKey) 
    val name: Rep[String] = column[String]("name") 

    override def * : ProvenShape[Person] = (id, name) <> (Person.tupled, Person.unapply) 
} 

object MainRunner extends App { 

    val dbUrl = "jdbc:postgresql://172.17.0.2/slick-test"; 
    val dbUsername = "username" 
    val dbPassword = "password" 
    val dbDriver = "org.postgresql.Driver" 

    val db = Database.forURL(url = dbUrl, driver = dbDriver, user = dbUsername, password = dbPassword) 

    val persons = TableQuery[Persons] 
    val queries = DBIO.seq(
    persons.schema.create 
) 
    val setup = db.run(queries) 
    println(setup) 
}  

werden denken, dass Sie diesen Code Problem hat?
Dieser Code kompilieren und ohne irgendein Problem (Fehler oder Ausnahmen)
läuft, kann aber Tabellenschema nicht erstellen!
Was ist los?

Antwort

1

Ich denke, es ist nicht über die Sitzung ist (keine solche Sache in Slick 3.x). Das Problem, das Sie haben, besteht darin, dass Sie nicht warten, bis der Vorgang abgeschlossen ist (Anwendung wird beendet, bevor das Schema erstellt wird; das heißt - bevor Future ausgeführt wird).

ändern diese Zeilen:

val setup = db.run(queries) 
println(setup) 

auf (neue Importe bemerken):

import import scala.concurrent.duration.DurationLong 
import scala.concurrent.{Await, Future} 
... 
... 
val setup = db.run(queries).foreach(_ => println("Done, schema created!)) 
Await.result(setup, 5L.seconds) 
+0

Ja, ich habe dieses Problem, Danke :), behoben ... – mah454