0

我在我的应用程序和 dev/prod 中使用 slick 2.0.0,它工作正常。

在测试模式下,我想自动生成一个 H2 数据库(从光滑的表定义中)并将其用于我的测试用例。我使用 scalatest 2.0。

用于测试的数据库定义(application.conf)如下

db{
  ...
  test {
    driver=org.h2.Driver
    url="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"
  }
}

在测试用例开始时,我调用

Slick.db.withTransaction { implicit s =>
  StaticQuery.updateNA("DROP ALL OBJECTS;")

  val createStatement = models.slick.Tables.ddl.createStatements.mkString("",";",";")
  println("CREATE: "+createStatement)
  StaticQuery.updateNA(createStatement)
}

(在测试模式下,Slick.db 指向来自 play-slick 插件的 DB("test"),所以它只需要在 db.test 中的 application.conf 中定义的 DataSource)

运行测试用例时,我得到以下输出:

CREATE: [...]; create table `mytable` (`field1` VARCHAR(254) NOT NULL,`field2` VARCHAR(254) NOT NULL,`field3` VARCHAR(254) NOT NULL,`ID` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY); [...]
[info] - should [...] *** FAILED ***
[info]   org.h2.jdbc.JdbcSQLException: Tabelle "MYTABLE" nicht gefunden
[info] Table "MYTABLE" not found; SQL statement:
[info] INSERT INTO `mytable` (`field1`,`field2`,`field3`) VALUES (?,?,?) [42102-172]
[info]   at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
[info]   at org.h2.message.DbException.get(DbException.java:169)
[info]   at org.h2.message.DbException.get(DbException.java:146)
[info]   at org.h2.command.Parser.readTableOrView(Parser.java:4824)
[info]   at org.h2.command.Parser.readTableOrView(Parser.java:4802)
[info]   at org.h2.command.Parser.parseInsert(Parser.java:966)
[info]   at org.h2.command.Parser.parsePrepared(Parser.java:375)
[info]   at org.h2.command.Parser.parse(Parser.java:279)
[info]   at org.h2.command.Parser.parse(Parser.java:251)
[info]   at org.h2.command.Parser.prepareCommand(Parser.java:218)
[info]   ...
[info] ScalaTest

所以它肯定会创建表并访问同一个表(尽管是大写的)。案例有问题吗?不要这么想。我怎样才能使这项工作?

如果大小写有问题,有没有办法告诉 slick 生成或使用具有相同大小写的表?

4

1 回答 1

0

一定是

StaticQuery.updateNA(createStatement).execute

代替

StaticQuery.updateNA(createStatement)
于 2014-03-07T19:39:53.380 回答