如何在 Slick 3.x 中获取?
How to fetch in Slick 3.x?
我有以下代码,它可以正常连接到数据库,但是我不知道如何打印每一行(相当于 JDBC 中的 rs.next
):
val db = Database.forConfig("dbconfig")
try {
val users: TableQuery[Users] = TableQuery[Users]
// fetch each user and print it
println("user : " + ??? )
} finally db.close
任何帮助将不胜感激,对于新手问题深表歉意。
请检查documentation。我也是 scala 和 slick 的新手。希望对您有所帮助。
val db = Database.forConfig("dbconfig")
try {
val users: TableQuery[Users] = TableQuery[Users]
// fetch each user and print it
// You need to import database driver...
// import slick.driver.MySQLDriver.api._
val usersListQueryResult = db.run(users.result) //it returns, Future[R]
// Now you can use blocking or non blocking call
val userList = Await.result(usersListQueryResult, Duration("60 seconds")) //Blocking
// OR
usersListQueryResult.foreach(println) //NonBlocking
} finally db.close
您也可以尝试以下方法
val db = Database.forConfig("dbconfig")
try {
val users: TableQuery[Users] = TableQuery[Users]
val printingAction:DBIO[Unit] =
for{seqUsers <- users.result} // DBIO[Seq[User]]
for{ user <- seqUsers} // simple executable code, :Unit
println("user : " + user )
val future = db.run(printingAction)
Await.result(future, 60.seconds) // need to wait before close db
} finally db.close
(与@Shakil 的回答非常相似)
Slick 中还有一个选项:http://slick.typesafe.com/doc/3.1.0/dbio.html#streaming
val db = Database.forConfig("dbconfig")
try {
val users: TableQuery[Users] = TableQuery[Users]
val p: DatabasePublisher[User] = db.stream(users.result)
p.foreach { user => println("user : " + user ) }
} finally db.close
这对我有用。重要的考虑是结果集 returns 一个 "Future",这意味着响应是异步的(与 Java 中的同步相反):
val db = Database.forConfig("dbconfig")
try {
val users: TableQuery[Users] = TableQuery[Users]
val action = users.result
val future = db.run(action)
future onComplete {
case Success(u) => u.foreach { user => println("user : " + user ) }
case Failure(t) => println("An error has occured: " + t.getMessage)
}
} finally db.close
我有以下代码,它可以正常连接到数据库,但是我不知道如何打印每一行(相当于 JDBC 中的 rs.next
):
val db = Database.forConfig("dbconfig")
try {
val users: TableQuery[Users] = TableQuery[Users]
// fetch each user and print it
println("user : " + ??? )
} finally db.close
任何帮助将不胜感激,对于新手问题深表歉意。
请检查documentation。我也是 scala 和 slick 的新手。希望对您有所帮助。
val db = Database.forConfig("dbconfig")
try {
val users: TableQuery[Users] = TableQuery[Users]
// fetch each user and print it
// You need to import database driver...
// import slick.driver.MySQLDriver.api._
val usersListQueryResult = db.run(users.result) //it returns, Future[R]
// Now you can use blocking or non blocking call
val userList = Await.result(usersListQueryResult, Duration("60 seconds")) //Blocking
// OR
usersListQueryResult.foreach(println) //NonBlocking
} finally db.close
您也可以尝试以下方法
val db = Database.forConfig("dbconfig")
try {
val users: TableQuery[Users] = TableQuery[Users]
val printingAction:DBIO[Unit] =
for{seqUsers <- users.result} // DBIO[Seq[User]]
for{ user <- seqUsers} // simple executable code, :Unit
println("user : " + user )
val future = db.run(printingAction)
Await.result(future, 60.seconds) // need to wait before close db
} finally db.close
(与@Shakil 的回答非常相似)
Slick 中还有一个选项:http://slick.typesafe.com/doc/3.1.0/dbio.html#streaming
val db = Database.forConfig("dbconfig")
try {
val users: TableQuery[Users] = TableQuery[Users]
val p: DatabasePublisher[User] = db.stream(users.result)
p.foreach { user => println("user : " + user ) }
} finally db.close
这对我有用。重要的考虑是结果集 returns 一个 "Future",这意味着响应是异步的(与 Java 中的同步相反):
val db = Database.forConfig("dbconfig")
try {
val users: TableQuery[Users] = TableQuery[Users]
val action = users.result
val future = db.run(action)
future onComplete {
case Success(u) => u.foreach { user => println("user : " + user ) }
case Failure(t) => println("An error has occured: " + t.getMessage)
}
} finally db.close