Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Slick 3.0 (Scala) Abfragen geben keine Daten zurück, bis sie mehrmals ausgeführt werden (glaube ich)

Alle DB-Aufrufe werden sofort zu Ihnen zurückgeschickt mit Futures , auch wenn sie mit ihren Operationen noch nicht fertig sind. Dies ist asynchron, nicht synchron.

Sie können Ihren Code ändern, um ihn an die Futures anzupassen auf eine von zwei Arten:

  1. Sie können Await.result verwenden bei allen DB-Aufrufen, um an diesem Punkt zu warten, bis sie abgeschlossen sind, zum Beispiel:Await.result(db.run(insertEffect), Duration.Inf)

  2. Sie können .map verwenden (oder .flatMap wenn Sie ein anderes Future verwenden von innen) mit Code, den Sie ausführen möchten, wenn der DB-Vorgang abgeschlossen ist. Zum Beispiel:db.run(insertEffect).map(_ => ... do stuff... )

Schauen Sie sich einen weiteren Stack Overflow an Faden bezüglich der Ausnahme mit einigen Ideen zur Ursache.