scala - 使用 Akka.io 从 Azure SQL 数据库中提取数据
问题描述
目前,我可以使用 intelliJ 创建会话:
//sqlserver is the name of application.conf {}
val databaseConfig = DatabaseConfig.forConfig[JdbcProfile]("sqlserver")
implicit val session = SlickSession.forConfig(databaseConfig)
这是配置:
sqlserver = {
profile = "slick.jdbc.SQLServerProfile$"
db {
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
host = <myHostName> e.g. myresource.database.windows.net
port = <myPortNumber> e.g 1433
databaseName = <myDatabaseName>
url = <jdbc:sqlserver:myHostName:port;database=myDatabase>
user = <user>
password = <password>
connectionTimeout = "30 seconds"
}
}
建议的一些方法是:
// The example domain
case class User(id: Int, name: String)
val users = (1 to 42).map(i => User(i, s"Name$i"))
// This import enables the use of the Slick sql"...",
// sqlu"...", and sqlt"..." String interpolators.
// See "http://slick.lightbend.com/doc/3.2.1/sql.html#string-interpolation"
import session.profile.api._
// Stream the users into the database as insert statements
val done: Future[Done] =
Source(users)
.via(
// add an optional first argument to specify the parallelism factor (Int)
Slick.flow(user => sqlu"INSERT INTO ALPAKKA_SLICK_SCALADSL_TEST_USERS VALUES(${user.id}, ${user.name})")
)
.log("nr-of-updated-rows")
.runWith(Sink.ignore)
我找不到任何方法示例让我使用 Akka.io 中的 SQL 命令提取任何数据。最接近的是这个链接:[Akka.io Slink JDBC][1]
此时,连接没有错误,但我仍然缺乏使用 Query 方法从 Azure SQL 数据库访问和下载的方法。
这个看起来像是在创建它自己的向量列表。
case class User(id: Int, name: String)
val users = (1 to 42).map(i => User(i, s"Name$i"))
结果:向量(User(1,Name1), User(2,Name2), ....)
有没有一种方法可以从 Azure SQL 服务器中提取我的数据?[1]:https ://doc.akka.io/docs/alpakka/current/slick.html
解决方案
如果你想从 SQL Server 获取数据到 Akka Stream,你需要一个Source
,而不是 a Sink
(用于从 Akka 写入数据库)。
因为 Alpakka 将 JDBC 集成推迟到Slick库,所以可能值得阅读该库。
从文档中,您将需要以下内容:
import slick.jdbc.GetResult
import session.profile.api._
case class User(id: Int, name: String)
// Define how to transform result rows (each row being a PositionedResult)
// into Users. See https://scala-slick.org/doc/3.3.2/sql.html
implicit val getUserFromResult = GetResult(r => User(r.nextInt, r.nextString))
val gotAllUsers: Future[Done] =
Slick.source(sql"SELECT id, name FROM table".as[User])
.log("user")
.runWith(Sink.ignore)
// Wait for the query to complete before exiting, only useful for this example.
Await.result(gotAllUsers, Duration.Inf)
推荐阅读
- ember.js - ember 引擎 routes.js 中的嵌套路由?
- jquery - Handsontable 中的虚拟键盘
- assembly - EAFFFFFE 在 ARM 架构中是什么意思
- php - 执行 mysqli_query 有效,但它不返回 WHERE CLAUSE 中给出的确切行
- javascript - 全球 Firebase 参考
- ios - AVCaptureSession captureOutput 回调丢帧并抛出 OutOfBuffers 错误
- android - 使用 Appium 与 Uiautomator 的优势
- c - C:没有单独的函数,代码就无法工作。为什么?
- ios - 快速获取当前位置API的温度
- r - mgcv::s(..., bs = "re") 导致加载NSM3包时出错