mysql - 如何解决RuntimeException : TypeDoesNotMatch(Cannot convert 1:class java. lang.String to Long for column?

标签 mysql scala playframework playframework-2.0 playframework-2.1

我正在使用 scala 开发简单的 web 应用程序,并将数据库存储在 mysql 中,但出现错误

Exception

我在做什么:

  • 当用户输入值并存储后,我将用户重定向到显示数据库中存在的所有条目的页面
  • 正在存储值,但在重定向到页面时会出现异常

models/Keyword.scala

case class Keyword(blog: String,cat: String,word: String,count: Long, summaryId: String)

object Keyword {


  val keyw = {
    get[String]("keyword.blog")~
    get[String]("keyword.cat")~
    get[String]("keyword.word")~
  get[Long]("keyword.count") ~ 
  get[String]("keyword.summaryId") map {
    case blog~cat~word~count~summaryId => Keyword(blog,cat,word,count, summaryId)
  }
}

  def all(): List[Keyword] = DB.withConnection { implicit c =>
  SQL("select * from keyword").as(Keyword.keyw *)
}


def create(key: Keyword){DB.withConnection{implicit c=> 
  SQL("insert into keyword values({blog}, {cat}, {word},{count},{summaryId})").on('blog->key.blog,
      'cat -> key.cat,
      'word-> key.word,
      'count-> key.count,
      'summaryId -> key.summaryId).executeUpdate()
}
}

controllers/Application.scala

object Application extends Controller {

  val ta:Form[Keyword] = Form(
          mapping(
    "blog" -> nonEmptyText,
    "cat" -> nonEmptyText,
    "word" -> nonEmptyText,
    "count"-> of[Long],
    "summaryId"-> nonEmptyText
  )(Keyword.apply)(Keyword.unapply)
  )

  def index = Action {
    Ok(html.index(ta));
  }
  def newTask=  Action { implicit request =>
  ta.bindFromRequest.fold(
    errors => BadRequest(html.index(errors)),
    keywo => {

      Keyword.create(keywo)
      Ok(views.html.data(Keyword.all()))
    }
  )
}

- 当我在运行时使用 h2 数据库

- 当我使用 MySQL 时出现异常

给我一​​些解决这个问题的想法!

最佳答案

在 app/helpers 文件夹中创建一个 AnormExtension 助手。将其命名为 AnormExtension.scala。代码如下:

object AnormExtension {

implicit def rowJavaLongToLong: Column[Long] = Column.nonNull { (value, meta) =>
  val MetaDataItem(qualified, nullable, clazz) = meta
    value match {
       case d: java.lang.Long => Right(d.longValue())
       case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to Long for column " + qualified))
    }
  }
}

关于mysql - 如何解决RuntimeException : TypeDoesNotMatch(Cannot convert 1:class java. lang.String to Long for column?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19678683/

相关文章:

scala - 映射到相同类型的 Traversable 的 Traversable 类型

scala - Play Framework 2.0 : Store values in Http. 上下文

java - Ebean - 按 UUID 列类型中的 UUID 部分查找

java - 如何在 Play 框架中执行查询(使用 Oracle 10g)

mysql - 查询错误 (1248) : Every derived table must have its own alias INNER JOIN

MySQL - 在结果集中最后对某些条件进行排序(也许是联合?)

scala - 在 Scala 中,我可以仅将某些文字隐式转换为我的自定义类型吗?

scala - 仅在 Play 中显示生产中的自定义错误页面

java - 最后一个成功发送到服务器的数据包是在 79,547 毫秒之前。比服务器配置值 'wait_timeout' 长

php - 发布动态输入表单并获取数组