【问题标题】:Play Slick config玩 Slick 配置
【发布时间】:2015-11-06 10:05:57
【问题描述】:

我正在尝试开始玩游戏。

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

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

在应用程序.conf中

  driver=net.sourceforge.jtds.jdbc.Driver

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

这是使用 jtds 驱动而不是

com.typesafe.slick.driver.ms.SQLServerDriver

这似乎是故意难以使用的。我还没有找到一个成功的配置。 JTDS 设法根据它的模式创建“供应商”表,但所有后续请求都因模糊的“数据截断”消息而失败;

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 Server 是否明智?

编辑::

@szeiger 指出我在模型类中导入了错误的东西。我从 Hello Slick 示例中导入了旧的 H2 驱动程序,应该用这个替换;

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

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

进行此更改后,“做某事”的数据库配置不再起作用,并宣传此内容

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

我已尝试更改实际 db 变量的实例化以匹配 szeiger 建议的“推荐”策略。

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

但似乎孤立地没有效果,我不确定如何配置它以访问“官方”光滑的 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"
)

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

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

【问题讨论】:

  • play-slick 只为您提供开源 Slick。您还需要添加 slick-extensions,如手册中所述。你也有版本冲突。 SimpleQL 在 Slick 3.1 中不再存在。查看play-slick 了解支持的 Play、Play-Slick 和 Slick 版本组合。
  • 我太笨了……我之前尝试过使用正确的版本,但没有找到,因为我没有添加解析器。如果你读到这个;试试这个 ...resolvers += "Typesafe Releases" at "repo.typesafe.com/typesafe/maven-releases"

标签: sql-server playframework-2.0 slick-3.0


【解决方案1】:

您混淆了 Slick 驱动程序和 JDBC 驱动程序。您使用的是哪个 Slick 驱动程序?您的 sn-p 中缺少导入,但应该有类似 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 将更改术语并将“驱动程序”一词专门用于 JDBC 驱动程序。 Slick 驱动程序将在 3.2 中称为“配置文件”。

【讨论】:

  • 好的,我已经尝试过了 - 将导入语句切换到 SQL 服务器。这当然感觉“正确”。然而,这似乎有一个缺点,就是事后不工作。我想在评论中写一个回复,但认为我需要回复这个问题才能获得正确的格式......下面的回复。
【解决方案2】:

在经历了额外的痛苦之后,看起来 slick 在 SQL Server 中创建了类型为“varchar(1)”的列。

不能保存太多数据。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    相关资源
    最近更新 更多