【问题标题】:Converting Biginteger to long causes error将 Biginteger 转换为 long 会导致错误
【发布时间】:2015-04-21 14:34:45
【问题描述】:

我正在将 playframework 应用程序数据库从 PostgreSQL 移动到 MySQL。

我在启动应用程序时收到此错误:

无法将 126:类 java.math.BigInteger 转换为 Long 列 ColumnName(Speaker.id,Some(id))

它似乎来自那里:

def listAll: List[Speaker] = DB.withConnection {implicit c =>
SQL("SELECT * FROM Speaker;")
  .as(speakerParser *)}<---

这里是speakerParser的代码:

private val speakerParser: RowParser[Speaker] = {
  get[Long]("id") ~
  get[String]("firstName") ~
  get[String]("lastName") ~
  get[String]("title") ~
  get[String]("team") ~
  get[String]("organisation") ~
  get[String]("email") map {
    case id ~ firstName ~ lastName ~ title ~ team ~ organisation ~ email => Speaker(id, firstName, lastName, title, team, organisation, email)
  }}

而导致我麻烦的专栏是 id:

Table: Speaker
Columns:
id  bigint(20) UN AI PK
title   varchar(20)
firstName   varchar(255)
lastName    varchar(255)
email   varchar(255)
team    varchar(255)
organisation    varchar(255)

这段代码不是我的,但我需要修改它。

我是 postgres、scala 和 Play 的新手,所以我可能会忘记一些非常简单的事情。

【问题讨论】:

  • 您正在使用一些特定的 Scala 数据库库——也许是异常?告诉人们你正在使用什么,并用它标记。
  • 是的,我正在使用异常库。我的问题已解决,我在下面的评论中解释了它。我是 StackOverflow 的新手,您认为我现在应该做什么?

标签: mysql postgresql scala playframework


【解决方案1】:

BigInteger 可以保存比 Int 更大的值,因此在不丢失信息的情况下进行转换可能会也可能不会。如果您可以将表定义更改为也使用 Int(或将两者都更改为 Long),则可以避免信息丢失。

【讨论】:

  • PostgreSQL 中的原始数据库使用的是与 MySQL SERIAL 不同的 SERIAL,它更多地对应于 MySQL INT NOT NULL AUTO_INCREMENT。感谢您给我的搜索方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多