Sql server 使用Play和Slick连接到MSSQL(jtds)

Sql server 使用Play和Slick连接到MSSQL(jtds),sql-server,scala,playframework,jtds,slick,Sql Server,Scala,Playframework,Jtds,Slick,我有一个使用Play2.1.1、slick和MySQL制作的项目已经完成了大约一个月。现在我需要把这个转移到MSSQL,我有一些问题 我的应用程序可以很好地编译并找到驱动程序,但每当我尝试建立连接时,我都会在站点上得到一个[RuntimeException:java.lang.ExceptionInInitializerError],我的控制台中有一个更详细的错误: play.api.Application$$anon$1: Execution exception[[RuntimeExcepti

我有一个使用Play2.1.1、slick和MySQL制作的项目已经完成了大约一个月。现在我需要把这个转移到MSSQL,我有一些问题

我的应用程序可以很好地编译并找到驱动程序,但每当我尝试建立连接时,我都会在站点上得到一个
[RuntimeException:java.lang.ExceptionInInitializerError]
,我的控制台中有一个更详细的错误:

play.api.Application$$anon$1: Execution exception[[RuntimeException: java.lang.ExceptionInInitializerError]]
    at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.1]
    at play.api.DefaultApplication.handleError(Application.scala:383) ~[play_2.10.jar:2.1.1]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:326) ~[play_2.10.jar:2.1.1]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:324) ~[play_2.10.jar:2.1.1]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.1]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.1]java.lang.RuntimeException: java.lang.ExceptionInInitializerError
    at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:222) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]
    at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:108) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:106) ~[play_2.10.jar:2.1.1]Caused by: java.lang.ExceptionInInitializerError: null
    at controllers.Application$$anonfun$addLicense$1.apply(Application.scala:18) ~[na:na]
    at controllers.Application$$anonfun$addLicense$1.apply(Application.scala:17) ~[na:na]
    at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:217) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]
    at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.1.1]
Caused by: play.api.Configuration$$anon$1: Configuration error[Slick error : Unknown jdbc driver found in application.conf: [net.sourceforge.jtds.jdbc.Driver]]
    at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:80) ~[play_2.10.jar:2.1.1]
    at play.api.Configuration.reportError(Configuration.scala:558) ~[play_2.10.jar:2.1.1]
    at play.api.db.slick.Config$.driver(Config.scala:21) ~[play-slick_2.10-0.3.3.jar:0.3.3]
    at play.api.db.slick.Config$.driver$lzycompute(Config.scala:7) ~[play-slick_2.10-0.3.3.jar:0.3.3]
    at play.api.db.slick.Config$.driver(Config.scala:7) ~[play-slick_2.10-0.3.3.jar:0.3.3]
    at models.License$.<init>(License.scala:38) ~[na:na]
它找到了司机,因为如果我输入了错误的名字,它会给我一个错误;如果输入此项,则不会。我的
lib
目录中有jtds驱动程序

我也会在启动时连接到数据库

[info] play - database [default] connected at jdbc:jtds:sqlserver://ServerAddress/EGLC
其他一些信息:

application.conf

db.default.url="jdbc:jtds:sqlserver://ServerAddress/EGLC"
db.default.driver=net.sourceforge.jtds.jdbc.Driver
db.default.user="sa"
db.default.password="pass"
slick.default="models.*"
val appDependencies = Seq(
// Add your project dependencies here,
jdbc,
"mysql" % "mysql-connector-java" % "5.1.25",
"net.sourceforge.jtds" % "jtds" % "1.3.1",
"com.typesafe.play" %% "play-slick" % "0.3.3"
)
Build.scala

db.default.url="jdbc:jtds:sqlserver://ServerAddress/EGLC"
db.default.driver=net.sourceforge.jtds.jdbc.Driver
db.default.user="sa"
db.default.password="pass"
slick.default="models.*"
val appDependencies = Seq(
// Add your project dependencies here,
jdbc,
"mysql" % "mysql-connector-java" % "5.1.25",
"net.sourceforge.jtds" % "jtds" % "1.3.1",
"com.typesafe.play" %% "play-slick" % "0.3.3"
)
编辑当我刷新页面时,尽管我得到了一个新的异常,其中有一组错误甚至没有提到JTD

play.api.Application$$anon$1: Execution exception[[RuntimeException: java.lang.NoClassDefFoundError: Could not initialize class models.Location$]]
    at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.1]
    at play.api.DefaultApplication.handleError(Application.scala:383) ~[play_2.10.jar:2.1.1]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:326) ~[play_2.10.jar:2.1.1]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:324) ~[play_2.10.jar:2.1.1]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.1]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.1]java.lang.RuntimeException: java.lang.NoClassDefFoundError: Could not initialize class models.Location$
    at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:222) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]
    at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:108) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:106) ~[play_2.10.jar:2.1.1]
Caused by: java.lang.NoClassDefFoundError: Could not initialize class models.Location$
    at controllers.Application$$anonfun$locations$1$$anonfun$apply$12$$anonfun$apply$13.apply(Application.scala:47) ~[na:na]
    at controllers.Application$$anonfun$locations$1$$anonfun$apply$12$$anonfun$apply$13.apply(Application.scala:46) ~[na:na]
    at controllers.Secured$$anonfun$IsAuthenticated$3$$anonfun$apply$3.apply(Auth.scala:38) ~[na:na]
    at controllers.Secured$$anonfun$IsAuthenticated$3$$anonfun$apply$3.apply(Auth.scala:38) ~[na:na]
    at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:217) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]

我应该在您的项目中添加jtds驱动程序作为依赖项:

val appDependencies = Seq(
// Add your project dependencies here,
jdbc,
"com.typesafe.play" %% "play-slick" % "0.3.3",
"net.sourceforge.jtds" % "jtds" % "1.3.0"
)

玩滑头的人不知道该怎么做。虽然总体上很圆滑,但要玩圆滑的游戏:

如您所见,Microsoft的驱动程序受支持,而jTDS则不受支持。您现在可以使用Microsoft的JDBC驱动程序或修改play slick。变化很简单。只要加一行就行了

,"net.sourceforge.jtds.jdbc.Driver" -> SQLServerDriver
它应该会起作用


我已经在项目的GitHub页面上看到了。我已经发了一封信。也许它会被整合到play slick的下一个版本中。

我知道这是一篇老文章,但只是想帮助任何登陆这里的人。使用Slick 3.2.3,使用Microsoft SQL Server非常简单。对于SBT项目,以下配置需要转到application.conf文件

sqlserver = {
 driver = "slick.jdbc.SQLServerProfile$"
 db {
  host = ${?SQLSERVER_HOST}
  port = ${?SQLSERVER_PORT}
  databaseName = ${?SQLSERVER_DB_NAME}

  url = "jdbc:sqlserver://"${sqlserver.db.host}":"${sqlserver.db.port}";databaseName="${sqlserver.db.databaseName}
  user = ${?SQLSERVER_USERNAME}
  password = ${?SQLSERVER_PASSWORD}
 }
}
下面的代码片段可用于获取数据库实例

val dbConfig: DatabaseConfig[JdbcProfile] = DatabaseConfig.forConfig("sqlserver")
val db: JdbcProfile#Backend#Database = dbConfig.db
为了为您的FRM启用MS SQL API,可以使用以下导入

 import slick.jdbc.SQLServerProfile.api._
我认为使用一个工作示例可以很容易地理解设置,该示例可在以下位置获得:

我的lib文件夹中有这个罐子。谢谢,至少现在我知道发生了什么。唯一的问题是当前版本的插件有不同的语法,我真的不想去改变我所有的旧代码。我尝试使用MS jdbc驱动程序,但当我把它放在lib中时,它没有找到它。知道为什么找不到驱动程序吗?不同的语法?让我猜猜:在数据库方法的开头,在
隐式会话=>
期间或前后,会出现编译器错误吗?只需定义它的类型,其余的就可以保持不变:
隐式会话:session=>
。不过,我不知道微软的驱动程序。可能是别人干的。啊,可能就是这样。SQL server驱动程序问题是一个愚蠢的错误的包顺序。但是现在它说它不能使用db.default.url=“jdbc:microsoft:sqlserver://ServerAddress/EGLC“或
db.default.url=“jdbc:sqlserver://ServerAddress/EGLC“
所以我不确定发生了什么。。。不过谢谢你的帮助,如果/当拉请求被接受,我可能只定义类型并升级。请阅读。你的看起来都错了。谢谢,现在就知道了
jdbc:sqlserver://ServerAddress;databaseName=EGLC我刚从谷歌搜索中找到的东西中走出来。