Scala Slick 在数据库中创建 Table

Scala Slick Create Table in Database

我正在构建一个 ScalaFX 应用程序并想添加 Slick 作为我的数据库框架。我对它很陌生,正在尝试使用 Slick 配置我的应用程序。我正在逐步按照在线教程进行操作。但是,当我执行 db.run() 时,我的表永远不会创建。我已经尝试了 运行 普通 sql 查询并且有效,所以并不是说它没有连接。它运行得很好,只是 returns "Coffees: " 这是我的代码。提前致谢!

import scala.concurrent.{Future, Await}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration
import slick.backend.DatabasePublisher
import slick.driver.MySQLDriver.api._
import scala.slick.jdbc.{StaticQuery => Q}
import scala.concurrent.{Future, Await}
// The main application
object CustomerQueries extends App {
  val db = Database.forURL("jdbc:mysql://localhost:3306/business", driver="com.mysql.jdbc.Driver",
    user="pslagle12", password="pfSlagle12")
    val coffees = TableQuery[Coffees]
  val suppliers = TableQuery[Suppliers]
  //Q.updateNA("CREATE TABLE `company_name`").execute
      val customers = TableQuery[Customers]
  db.withSession {implicit session =>
    val setup = DBIO.seq(
      (suppliers.schema ++ coffees.schema).create,
suppliers += (101, "Acme, Inc.",      "99 Market Street", "Groundsville", "CA", "95199"),
      suppliers += ( 49, "Superior Coffee", "1 Party Place",    "Mendocino",    "CA", "95460"),
      suppliers += (150, "The High Ground", "100 Coffee Lane",  "Meadows",      "CA", "93966"),
      // Equivalent SQL code:
      // insert into SUPPLIERS(SUP_ID, SUP_NAME, STREET, CITY, STATE, ZIP) values (?,?,?,?,?,?)
      coffees ++= Seq(
        ("Colombian",         101, 7.99, 0, 0),
        ("French_Roast",       49, 8.99, 0, 0),
        ("Espresso",          150, 9.99, 0, 0),
        ("Colombian_Decaf",   101, 8.99, 0, 0),
        ("French_Roast_Decaf", 49, 9.99, 0, 0)
            )
    )
    val setupFuture = db.run(setup)
    // Read all coffees and print them to the console
    println("Coffees:")
    db.run(coffees.result).map(_.foreach {
      case (name, supID, price, sales, total) =>
        println("  " + name + "\t" + supID + "\t" + price + "\t" + sales + "\t" + total)
    })
    // Equivalent SQL code:
    // select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES

  }
class Suppliers(tag: Tag) extends Table[(Int, String, String, String, String, String)](tag, "SUPPLIERS") {
    def id = column[Int]("SUP_ID", O.PrimaryKey) // This is the primary key column
    def name = column[String]("SUP_NAME")
    def street = column[String]("STREET")
    def city = column[String]("CITY")
    def state = column[String]("STATE")
    def zip = column[String]("ZIP")
    // Every table needs a * projection with the same type as the table's type parameter
    def * = (id, name, street, city, state, zip)
  }


  // Definition of the COFFEES table
  class Coffees(tag: Tag) extends Table[(String, Int, Double, Int, Int)](tag, "COFFEES") {
    def name = column[String]("COF_NAME", O.PrimaryKey)
    def supID = column[Int]("SUP_ID")
    def price = column[Double]("PRICE")
    def sales = column[Int]("SALES")
    def total = column[Int]("TOTAL")

def * = (name, supID, price, sales, total)
    // A reified foreign key relation that can be navigated to create a join
    def supplier = foreignKey("SUP_FK", supID, suppliers)(_.id)
  }

}

为确保设置查询完成后结果查询为运行,您应该运行同时进行这两个操作:

val resultFuture = db.run(setup >> coffees.result)

然后,如 jkinkead 所建议的那样,等待 Future 完成,如果您希望打印结果:

Await.result(resultFuture, 10 seconds)