播放Slick config

时间:2015-11-06 10:05:58

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

我试图开始玩游戏和光滑。

策略;从激活器教程中获取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设法创建供应商'表格基于它的架构,但随后的所有请求都会出现模糊的数据截断现象。信息;

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

有没有人有任何想法?用光滑连接到SQL服务器 - 3.1甚至是一个明智的尝试吗?

编辑::

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

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

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

2 个答案:

答案 0 :(得分:0)

在奖励之后,看起来像slick在SQL Server中创建了类型为'varchar(1)'的列。

哪个数据无法容纳。

不使用Slick来创建表格,并且注释掉这些行然后意味着该介绍的工作方式与宣传的一样。

答案 1 :(得分:0)

您对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将改变术语并专门为JDBC驱动程序使用“驱动程序”一词。光滑的驱动程序将在3.2中被称为“配置文件”。