[英]How to get sum of a result from Mysql in scala with play framework?
我正在使用简单的Scala Web应用程序,并且正在运行查询,然后Play应用程序出现异常
[RuntimeException:UnexpectedNullableFound(ColumnName(.SUM(score),Some(SUM(score))))]]
play.api.Application$$anon$1: Execution exception[[RuntimeException: UnexpectedNullableFound(ColumnName(.SUM(score),Some(SUM(score))))]]
at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.2]
at play.api.DefaultApplication.handleError(Application.scala:383) ~[play_2.10.jar:2.1.2]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$18$$anonfun$apply$18.apply(PlayDefaultUpstreamHandler.scala:310) ~[play_2.10.jar:2.1.2]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$18$$anonfun$apply$18.apply(PlayDefaultUpstreamHandler.scala:308) ~[play_2.10.jar:2.1.2]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.2]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.2]
Caused by: java.lang.RuntimeException: UnexpectedNullableFound(ColumnName(.SUM(score),Some(SUM(score))))
at scala.sys.package$.error(package.scala:27) ~[scala-library.jar:na]
at anorm.Sql$.as(Anorm.scala:535) ~[anorm_2.10.jar:2.1.2]
at anorm.Sql$class.as(Anorm.scala:453) ~[anorm_2.10.jar:2.1.2]
at anorm.SimpleSql.as(Anorm.scala:370) ~[anorm_2.10.jar:2.1.2]
at models.Keyword$$anonfun$getBlogScore$1.apply(Keyword.scala:53) ~[na:na]
at models.Keyword$$anonfun$getBlogScore$1.apply(Keyword.scala:52) ~[na:na]
型号/关键字.scala
def getBlogScore(word: String, blog: String): Long={DB.withConnection{implicit c=>
SQL("select SUM(score) from keyword where blog like {blog} and word = {word}").on('blog->blog,'word->word).as(scalar[Long].single)
}
}
我想基于某些条件获取分数列的总和。
给我一些解决此异常的想法!
尝试:
SQL("select SUM(score) from keyword where blog like {blog} and word = {word}").
on('blog->blog,'word->word).
as(scalar[Option[Long]].single).
getOrElse(0L)
我猜当没有行匹配时SUM
返回NULL
。 我还猜测在这种情况下,您可能想要0
。
因此,您必须处理这种情况。 Option
浮现在脑海。 快速浏览一下文档,对Option
进行.singleOpt
表示有一个.singleOpt
。
因此,您可以尝试:
def getBlogScore(word: String, blog: String): Long =
DB.withConnection { implicit c =>
SQL("select SUM(score) from keyword where blog like {blog} and word = {word}").
on('blog->blog,'word->word).
as(scalar[Long].singleOpt).
getOrElse(0L)
}
有点晚了,但是这个问题在Anorm master分支中得到了解决: https : //github.com/playframework/playframework/pull/2072
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.