如何使用 slick 创建数据库

Posted

技术标签:

【中文标题】如何使用 slick 创建数据库【英文标题】:How to create database with slick 【发布时间】:2018-10-22 13:08:30 【问题描述】:

我尝试使用以下代码创建带有 slick 的数据库

我的部分构建依赖项

scalaVersion := "2.12.6"

libraryDependencies += "com.typesafe.play" %% "play-slick" % "3.0.0"
libraryDependencies += "mysql" % "mysql-connector-java" % "8.0.12"

_

val db = Database.forURL("jdbc:mysql://localhost", "user", "password")
val dbName = "database1"
Await.result(db.run(sqlu"CREATE DATABASE $dbName"), 1.second)

用户拥有 *.* 的所有权限

但是会抛出异常

java.util.NoSuchElementException: Invoker.first
   at slick.jdbc.Invoker.first(Invoker.scala:34)
   at slick.jdbc.Invoker.first$(Invoker.scala:30)
   at slick.jdbc.StatementInvoker.first(StatementInvoker.scala:16)
   at slick.jdbc.StreamingInvokerAction$HeadAction.run(StreamingInvokerAction.scala:52)
   at slick.jdbc.StreamingInvokerAction$HeadAction.run(StreamingInvokerAction.scala:51)
   at slick.basic.BasicBackend$DatabaseDef$$anon$2.liftedTree1$1(BasicBackend.scala:240)
   at slick.basic.BasicBackend$DatabaseDef$$anon$2.run(BasicBackend.scala:240) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
 at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
 at java.base/java.lang.Thread.run(Thread.java:844)

请告诉我如何毫无例外地创建数据库。 我想为每个用户创建一个数据库,所以我不能在 application.conf 中写入数据库名称

【问题讨论】:

您使用哪个版本的 slick? Slick 版本是 3.2.2。我通过 Play Slick 3.0.0 使用 slick 能否包含构建定义? 【参考方案1】:

我建议你通过 https://www.playframework.com/documentation/2.6.x/PlaySlick 。 正确设置application.conf中的数据库配置

slick.dbs.default.driver = "slick.driver.MySQLDriver$"
 slick.dbs.default.db.driver = "com.mysql.jdbc.Driver"
 slick.dbs.default.db.url = "jdbc:mysql://localhost/demoDBName"
 slick.dbs.default.db.user = "root user name"
 slick.dbs.default.db.password = ""

如果应用程序不存在,这将在运行您的应用程序时创建demoDBName。希望能帮助到你。

【讨论】:

以上是关于如何使用 slick 创建数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Slick 3 生成 BIGSERIAL 而不是 GENERATED BY DEFAULT AS IDENTITY?

浅谈Slick- Slick101:第一个动手尝试的项目

如何使用 slick 进行聚合

Slick 的日志记录选项

在 Play framework 2.4 中使用 Slick 3 在哪里初始化数据库?

如何向 [react-slick] 添加支持触摸的灯箱功能?