播放 Slick 配置

Play Slick config

我正在尝试开始玩游戏。

策略;从激活器教程中获取 hello-slick-3.1 项目。

如果内存数据库中的 H2 工作正常。我想连接到 sql 服务器。经过一场战斗后,我有一些配置似乎可以使用 jdts 进行连接。

在应用程序.conf

  driver=net.sourceforge.jtds.jdbc.Driver

url="jdbc:jtds:sqlserver://%%%%:1433;databaseName=%%%%;user=%%%;password=%%%%%"

这是使用 jtds 驱动程序而不是

com.typesafe.slick.driver.ms.SQLServerDriver

这似乎是故意设置为难以使用。我还没有找到成功的配置。 JTDS 设法基于它的模式创建 'suppliers' table,但是所有后续请求都以模糊的 'data truncation' 消息失败;

object HelloSlick extends App {
  val db = Database.forConfig("sqlServerLocal")
  try {

    // The query interface for the Suppliers table
    val suppliers: TableQuery[Suppliers] = TableQuery[Suppliers]

    val setupAction: DBIO[Unit] = DBIO.seq(
      // Create the schema by combining the DDLs for the Suppliers and Coffees
      // tables using the query interfaces
      //(suppliers.schema).create,

      // Insert some suppliers
      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")
    )

告诉我

background log: info: 10:58:48.465 [sqlServerLocal-1] DEBUG slick.jdbc.JdbcBackend.statement - Preparing statement: insert into "SUPPLIERS" ("SUP_ID","SUP_NAME","STREET","CITY","STATE","ZIP")  values (?,?,?,?,?,?)
background log: error: Exception in thread "main" java.sql.DataTruncation: Data truncation

有人有什么想法吗?使用 slick - 3.1 连接到 SQL 服务器是否是明智的尝试?

编辑::

@szeiger 提出了一个很好的观点,即我将错误的东西导入到模型中 类。我从 Hello Slick 示例中导入了旧的 H2 驱动程序,应该用这个替换;

import com.typesafe.slick.driver.ms.SQLServerDriver.api._

为了作为 SQL 服务器语言工作。

进行此更改后,'did something' 的数据库配置不再有效,对此进行通告

background log: info: Running HelloSlick 
background log: error: Exception in thread "main" java.lang.NoClassDefFoundError: slick/profile/BasicProfile$SimpleQL

我尝试更改实际 db 变量的实例化以匹配 szeiger 建议的 'recommended' 策略。

  val db = Database.forURL("jdbc:sqlserver://%%%:1433;user=%%%%;password=%%%%", driver="com.typesafe.slick.driver.ms.SQLServerDriver",
    executor = AsyncExecutor("test1", numThreads=10, queueSize=1000))

不幸的是,这失败了;

background log: error: Exception in thread "main" java.lang.NoClassDefFoundError: slick/profile/BasicProfile$Implicits

对于 jtds 驱动程序,它与光滑的 MSSQL 驱动程序有相同的错误消息,尽管我尽了最大努力,但我无法实例化 MS JDBC 驱动程序。它位于应用程序中名为 'lib' 的文件夹中,尽管我怀疑这可能是天真且错误的地方。

通过 play-slick 管理这种依赖性会非常好。我原以为我会通过在 SBT 中包含这一行来做到这一点;

"com.typesafe.play" %% "play-slick" % "1.1.0",

但似乎单独没有效果,我不确定如何配置它以达到 'official' 光滑的 MS SQL 驱动程序。

编辑 2:: 最后,这似乎构建了我想要的。

name := """hello-slick-3.1"""

lazy val root = (project in file(".")).enablePlugins(PlayScala)

resolvers += "Typesafe Releases" at "http://repo.typesafe.com/typesafe/maven-releases/"
resolvers += "Scalaz Bintray Repo" at "https://dl.bintray.com/scalaz/releases"
resolvers += Resolver.url("Typesafe Ivy releases", url("https://repo.typesafe.com/typesafe/ivy-releases"))(Resolver.ivyStylePatterns)


scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
  "com.typesafe.slick" %% "slick" % "3.1.0",
  "com.typesafe.slick" %% "slick-extensions" % "3.1.0",
  "com.typesafe.play" %% "play-slick" % "1.1.0",
  "org.scalatest" %% "scalatest" % "2.2.4" % "test"
)

我遇到了很多问题,因为我忘了包含正确的解析器。

不要忘记包含正确的解析器:-)。

在额外痛苦之后,看起来 slick 在 SQL 服务器中创建了类型为 'varchar(1)' 的列。

不能容纳太多数据。

不使用 Slick 来创建表格,并且注释掉这些行则意味着介绍如宣传的那样工作。

您混淆了 Slick 驱动程序和 JDBC 驱动程序。您使用的是哪个 Slick 驱动程序?您的代码段中缺少导入,但应该有类似 import com.typesafe.slick.driver.ms.SQLServerDriver.api._ 的内容。此处使用错误的驱动程序可以解释将字符串列创建为 VARCHAR(1).

在 Slick 3.1 中配置数据库连接的推荐方法是通过 DatabaseConfig,它允许您将 Slick 驱动程序与实际连接参数一起配置。当您编写 Play 应用程序时,请改用 play-slick 插件来处理数据库连接。它也基于 DatabaseConfig 语法。

net.sourceforge.jtds.jdbc.Driver 的替代方案是 Microsoft 自己的 JDBC 驱动程序,com.microsoft.sqlserver.jdbc.SQLServerDriver 可以从 Microsoft 单独下载。您必须手动将 sqljdbc4.jar 添加到您的构建中才能使其正常工作。

顺便说一句,Slick 3.2 将更改术语并使用 "driver" 一词专门用于 JDBC 驱动程序。 Slick 驱动程序将在 3.2 中被称为 "profiles"。