光滑的';n scala:没有.ddl字段的TableQuery对象

光滑的';n scala:没有.ddl字段的TableQuery对象,scala,traits,slick,Scala,Traits,Slick,使用scala、slick 2.0和eclipse时,我有一个无法解释的错误:“value ddl不是scala.slick.lifted.TableQuery[SqliteSpec.this.persones]的成员。” 代码如下: 我宣布这样一个特征: trait sqlite { val db = Database.forURL("jdbc:sqlite:rdvs.txt", driver = "org.sqlite.JDBC") class Personnes(tag: Tag) e

使用scala、slick 2.0和eclipse时,我有一个无法解释的错误:“value ddl不是scala.slick.lifted.TableQuery[SqliteSpec.this.persones]的成员。”

代码如下: 我宣布这样一个特征:

trait sqlite {

val db = Database.forURL("jdbc:sqlite:rdvs.txt", driver = "org.sqlite.JDBC")

class Personnes(tag: Tag) extends Table[Rdv](tag, "RDV") {

  def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
  def nom = column[String]("NOM", O.NotNull)
  def prénom = column[String]("PRENOM")
  def sexe = column[Int]("SEXE")
  def télPortable = column[String]("TELPOR")
  def télBureau = column[String]("TELBUR")
  def télPrivé = column[String]("TELPRI")
  def siteRDV = column[String]("SITE")
  def typeRDV = column[String]("TYPE")
  def libelléRDV = column[String]("LIBELLE")
  def numRDV = column[String]("NUMRDV")
  def étape = column[String]("ETAPE")
  def dateRDV = column[Date]("DATE")
  def heureRDVString = column[String]("HEURE")
  def statut = column[String]("STATUT")
  def orderId = column[String]("ORDERID")

  def * = (id.?, nom, prénom, sexe, télPortable, télBureau, télPrivé,
    siteRDV, typeRDV, libelléRDV, numRDV, étape, dateRDV, heureRDVString,
    statut, orderId) <> (Rdv.tupled, Rdv.unapply _)

  } 
}
尽管我遵循了这个官方教程:(DDL部分)

你知道怎么了吗?
谢谢。

我想添加整个代码,但我的问题下不再显示“编辑”按钮;代码如下:

package tests {

@RunWith(classOf[JUnitRunner])
class SqliteSpec extends Specification with sqlite {

"la base sqlite" should {

  "create a new database file" in new Sqlite_avant_chaque_test {

    todo
  }
}

class Sqlite_avant_chaque_test extends Scope {

  println("avant test")

  def abc = {
    db.withDynSession {

      val personnes = TableQuery[Personnes]
      personnes.ddl.create
    }

  }

}
}
}
好的,我只需要登录;以下是工作代码:

import org.specs2.execute.AsResult
import org.specs2.runner.JUnitRunner
import scala.collection.GenTraversableOnce
import org.specs2.time.TimeConversions$longAsTime
import org.specs2.collection.BiMap
import org.specs2.control.Debug$Debuggable
import scala.collection.mutable.ListBuffer
import org.specs2.internal.scalaz.TreeLoc
import org.specs2.mutable.Specification
import scala.xml.NodeSeq
import scala.collection.immutable.List
import org.specs2.text.LinesContent
import org.specs2.specification.Fragments
import scala.math.Numeric
import java.net.URL
import org.specs2.matcher.MatchSuccess
import scala.runtime.Nothing$
import scala.reflect.ClassTag
import org.specs2.main.Arguments
import java.io.InputStream
import org.specs2.data.Sized
import org.junit.runner.RunWith
import org.specs2.specification.Scope
import java.sql.SQLInvalidAuthorizationSpecException
import models.sqlite
import scala.slick.lifted.TableQuery
//import scala.slick.driver.JdbcDriver.simple._
import scala.slick.driver.SQLiteDriver.simple._
import play.api.test.Helpers
import play.test.Helpers

package tests {

@RunWith(classOf[JUnitRunner])
class SqliteSpec extends Specification with sqlite {

sequential

"la base sqlite" should {

  "create a new database file" in new Sqlite_avant_chaque_test {

    todo
  }
}

class Sqlite_avant_chaque_test extends Scope {

  println("avant test")

  //db.withDynSession {
  db.withSession { implicit session: Session =>
    val personnes = TableQuery[Personnes]
    personnes.ddl.create
    println("avant tests, après création base")
  }

}

}
}

也许这对某些人有用:我也有同样的问题,但我的错误是导入了不同的驱动程序。在我的主要模型类中有Postgres',但在我的测试中有H2(为了进行内存集成测试)。切换到相同的驱动程序解决了问题。

您是否导入了
scala.slick.driver.JdbcDriver.simple.\u
?您好;我添加了这个导入,但没有成功:错误仍然存在。嗯,Scala似乎无法找到使
ddl
可用的隐式元素。但我可能完全弄错了。我尝试了“db.withSession{implicit session=>…”,但结果相同。使
session
隐式是不相关的。我尝试重现您的示例,它编译得很好(使用
import scala.slick.driver.JdbcDriver.simple.
)除了我缺少Rdv这一事实。这是正确的。你需要在任何地方从相同的驱动程序导入。切换到相同的驱动程序是什么意思?我现在遇到了这个问题。我在源代码中使用Postgres驱动程序,在测试中使用h2驱动程序。如果我必须切换到相同的驱动程序,那么我将无法使用H2用于测试!
import org.specs2.execute.AsResult
import org.specs2.runner.JUnitRunner
import scala.collection.GenTraversableOnce
import org.specs2.time.TimeConversions$longAsTime
import org.specs2.collection.BiMap
import org.specs2.control.Debug$Debuggable
import scala.collection.mutable.ListBuffer
import org.specs2.internal.scalaz.TreeLoc
import org.specs2.mutable.Specification
import scala.xml.NodeSeq
import scala.collection.immutable.List
import org.specs2.text.LinesContent
import org.specs2.specification.Fragments
import scala.math.Numeric
import java.net.URL
import org.specs2.matcher.MatchSuccess
import scala.runtime.Nothing$
import scala.reflect.ClassTag
import org.specs2.main.Arguments
import java.io.InputStream
import org.specs2.data.Sized
import org.junit.runner.RunWith
import org.specs2.specification.Scope
import java.sql.SQLInvalidAuthorizationSpecException
import models.sqlite
import scala.slick.lifted.TableQuery
//import scala.slick.driver.JdbcDriver.simple._
import scala.slick.driver.SQLiteDriver.simple._
import play.api.test.Helpers
import play.test.Helpers

package tests {

@RunWith(classOf[JUnitRunner])
class SqliteSpec extends Specification with sqlite {

sequential

"la base sqlite" should {

  "create a new database file" in new Sqlite_avant_chaque_test {

    todo
  }
}

class Sqlite_avant_chaque_test extends Scope {

  println("avant test")

  //db.withDynSession {
  db.withSession { implicit session: Session =>
    val personnes = TableQuery[Personnes]
    personnes.ddl.create
    println("avant tests, après création base")
  }

}

}
}