Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Playframework 如何在游戏2.3中尝试修改的anorm代码_Playframework_Anorm - Fatal编程技术网

Playframework 如何在游戏2.3中尝试修改的anorm代码

Playframework 如何在游戏2.3中尝试修改的anorm代码,playframework,anorm,Playframework,Anorm,我正在从Play迁移我的应用程序!2.1至2.3 编译错误消失了,并且几乎没有失败的测试 其中一个与阿诺姆有关 [error] NullPointerException: (BatchSql.scala:100) [error] anorm.BatchSql$class.execute(BatchSql.scala:100) [error] anorm.BatchSql$Copy.execute(BatchSql.scala:193) [error] models.StoreUser$

我正在从Play迁移我的应用程序!2.1至2.3

编译错误消失了,并且几乎没有失败的测试

其中一个与阿诺姆有关

[error]    NullPointerException:   (BatchSql.scala:100)
[error] anorm.BatchSql$class.execute(BatchSql.scala:100)
[error] anorm.BatchSql$Copy.execute(BatchSql.scala:193)
[error] models.StoreUser$.insertByCsv(User.scala:314)
听起来我需要破解Anorm代码。我参考下面的页面来编译剧本!来源:

https://www.playframework.com/documentation/2.3.x/BuildingFromSource

$ git clone git://github.com/playframework/playframework.git
$ cd playframework
$ git checkout remotes/origin/2.3.x
首先,我尝试更改playframework/framework/src/anrom/src/main/scala/anrom/BatchSql.scala

  def execute()(implicit connection: Connection): Array[Int] = {
    val s = getFilledStatement(connection)
    println("*** statement = " + s)
Thread.sleep(30000)
    s.executeBatch()
  }
在本地编译和发布:

$ PLAY_OPTS=-Dscala.version=2.11.6 ./build clean publish-local
删除我的常春藤缓存:

$ rm -rf ~/.ivy2/cache
更改我的项目的project/plugins.sbt:

//addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.8")
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3-SNAPSHOT")
Build.sbt文件:

libraryDependencies ++= Seq(
  "postgresql" % "postgresql" % "9.1-901.jdbc4",
  "com.typesafe.play" %% "play-mailer" % "2.4.0",
...
  jdbc,
//  anorm,
  "com.typesafe.play" %% "anorm" % "2.3-SNAPSHOT",
  cache,
  ws,
  filters
)
重新加载我的项目并再次测试失败的测试

但未显示打印消息(“***语句=xxx”)

如何使用修改后的Anorm代码

更新:

我仅从中克隆了anorm并调用了publish local。这样,现在我可以使用自己编译的anorm了。根本原因是,最新版本的anorm在调用批处理查询()时至少需要一个参数列表

必须使用至少一个参数列表调用批处理更新。如果批处理是在强制的第一个参数列表为空(例如Nil)的情况下执行的,则只会执行一条语句(不带参数),这相当于SQL(语句)。executeUpdate()。
如果没有提供任何参数,NPE将被抛出。我修复了我的应用程序,使其在参数列表为空时不调用execute()方法。

因此,您的代码似乎引起了与以下相同的误用:在没有参数的情况下,不应调用批处理


下一个版本将阻止此类调用。

首先,哪个版本会引发异常,在这种情况下。然后我要补充的是,2.3-SNAPSHOT不是master/next版本,它将是2.4-SNAPSHOT。如果您尝试构建Anorm,则新的repo是,因此我建议将您的依赖项更新为
“com.typesafe.play”%%Anorm“%”2.4-SNAPSHOT“正在更改()
。感谢您的评论。我在游戏中确认了这个例外!2.3.6. 我不想尝试最新版本的anorm,只想尝试更改anorm代码以及如何确定异常的根本原因。所以,我的问题是如何在游戏中使用我的改变了的anorm。我确认了anorm 2.3.6的异常,因此您可以首先尝试将依赖项更新为2.3.8。谢谢,我找到了此问题的根本原因。我已经更新了我的问题。是的,完全相同的问题。 Batch update must be called with at least one list of parameter. If a batch is executed with the mandatory first list of parameter being empty (e.g. Nil), only one statement will be executed (without parameter), which is equivalent to SQL(statement).executeUpdate().