【问题标题】:connecting slick 3.1.1 to the database将 slick 3.1.1 连接到数据库
【发布时间】:2016-06-06 11:53:03
【问题描述】:

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

cat 数据库.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()
  }
}

cat 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

我做错了什么?

发布编辑>

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
)

【问题讨论】:

    标签: scala slick


    【解决方案1】:

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

    • 重命名你的 Database 类:

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

      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")
      

    【讨论】:

    • 太棒了,解决了一个问题,+= 值怎么样 += 不是 slick.lifted.TableQuery[com.github.odnanref.EmailFilter.EmailMessageTable] 的成员
    • 您能否编辑您的问题并发布您的EmailMessage 案例类定义?
    • 看起来包含 db.run 调用的文件缺少导入:import slick.driver.MySQLDriver.api._
    • 谢谢,就是这样。忘了我是在另一个对象之外调用 run 方法。
    猜你喜欢
    • 2019-04-24
    • 2017-12-22
    • 2016-11-09
    • 2016-02-26
    • 2016-10-14
    • 1970-01-01
    • 2023-03-09
    • 2018-05-04
    • 2016-12-21
    相关资源
    最近更新 更多