Slick
Slick streaming comment cela se fait habituellement.
Extension de la documentation lisse un peu pour inclure akka flux:
//SELECT Name from Coffees
val q = for (c <- coffees) yield c.name
val action = q.result
type Name = String
val databasePublisher : DatabasePublisher[Name] = db stream action
import akka.stream.scaladsl.Source
val akkaSourceFromSlick : Source[Name, _] = Source fromPublisher databasePublisher
Maintenant akkaSourceFromSlick
est comme tout autre flux akka Source
.
ResultSet
Il est également possible d'utiliser une ResultSet simple, sans marée noire, comme le "moteur" pour un flux de Akka.
d'abord créer le ResultSet en utilisant des techniques standard jdbc:
import java.sql._
val statement : Statement = ???
val resultSet : ResultSet = statement executeQuery "SELECT Name from Coffees"
Maintenant, nous pouvons construire un Iterator
de la ResultSet qui itérer les lignes et récupérer la colonne "Name"
:
val nameIterator : (ResultSet) =>() => Iterator[Name] =
(resultSet) =>() =>
Try {
resultSet.beforeFirst()
}
match {
case Success(_) =>
new Iterator[Try[Name]] {
override def hasNext : Boolean = resultSet.next
override def next() : Try[Name] = Try{resultSet getString "Name"}
} flatMap (_.toOption)
case Failure(_) => Iterator.empty
}
Cette Iterator peut maintenant alimenter un Source:
Merci - cela semble bon! –
@EvanM. Vous êtes les bienvenus, joyeux piratage. –