将 slick 3.1.1 连接到数据库

connecting slick 3.1.1 to the database

我有以下代码,我正在尝试连接到 MySQL 数据库但没有成功。

猫Database.scala

package com.github.odnanref.EmailFilter

import slick.driver.MySQLDriver._
import slick.driver.MySQLDriver.backend.Database

/**
  * Created by andref on 12/05/16.
  */
class Database {
  val url = "jdbc:mysql://localhost/playdb"
  val db = Database.forURL(url, driver = "com.mysql.jdbc.Driver")

  override def finalize() {
    db.close()

    super.finalize()
  }
}

猫EmailMessageTable.scala

package com.github.odnanref.EmailFilter

import java.sql.Timestamp

import slick.driver.JdbcProfile
import slick.driver.MySQLDriver.api._

import scala.concurrent.Future

class EmailMessageTable(tag: Tag) extends Table[EmailMessage](tag, "email_message") {

  def id      = column[Option[Long]]("id", O.AutoInc, O.PrimaryKey)
  def email   = column[String]("email")
  def subject = column[String]("subject")
  def body    = column[String]("body")
  def datain  = column[Timestamp]("datain")
  def email_id= column[Long]("email_id")

  def * = (id, email, subject, body, datain, email_id) <> ((EmailMessage.apply _).tupled, EmailMessage.unapply)
  def ? = (id.get.?, email.?, subject.?, body.?, datain.?).shaped.<>({ r =>; _1.map(_ =>
    EmailMessage.tupled((_1, _2.get, _3.get, _4.get, _5.get))) }, (_: Any) =>
    throw new Exception("Inserting into ? projection not supported."))
}

我无法根据这段代码初始化数据库并执行搜索查询或插入语句我尝试这样做

val db = new Database()
db.db.run(TableQuery[EmailMessageTable] += EmailMessage(...) )
And it says, it doesn't know the method +=

我也收到这个错误:

Database.scala:4: imported `Database' is permanently hidden by definition of class Database in package EmailFilter
[warn] import slick.driver.MySQLDriver.backend.Database

我做错了什么?

Post 编辑>

package com.github.odnanref.EmailFilter

import java.sql.Timestamp


case class EmailMessage(
  id: Option[Long], 
  email: String, 
  subject:String,
  body:String,
  datain: Timestamp,
  email_id: Long
)

您正在一个文件中导入一个名为 Database 的 class,该文件定义了另一个具有相同名称的 class。您可以:

  • 重命名您的 Database class:

    class MyDatabase {
     val url = ...
     val db = ...
     ...
    }
    
  • 重命名导入 class:

    import slick.driver.MySQLDriver.backend.{Database => SlickDB}
    ...
    val db = SlickDB.forURL(url, driver = "com.mysql.jdbc.Driver")
    
  • 避免显式导入 Database

    import slick.driver.MySQLDriver.backend
    ...
    val db = backend.Database.forURL(url, driver = "com.mysql.jdbc.Driver")