微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当列类型为bigint时,PostgreSQL resultSet.getLong()会导致ArrayIndexOutOfBoundsException

我在Postgresql 9.1中有一个bigint类型的视图.此类型应在 Java中映射到Long,但实际上映射到BigInteger.所以

resultSet.getLong(columnPos)

导致Arrayindexoutofboundsexception.

resultSet.getBigInteger(columnPos)

要么

resultSet.get(columnPos)

两者都有以下toString和解析工作正常.
对此有何正确处理?我应该先获取BigInteger,调用toString并解析Long吗?或者是否有更好的方法来告诉ResultSet或ScrollableResults正确的Java列类型?

谢谢.

解决方法

bigint数据类型正确映射到BigInteger,因为它的含义是:它是一个大整数,可能不适合Long.

您可以使用resultSet.get(columnPos),然后检查返回对象的类.

我们为此编写了一个实用程序类,所以我们会这样做:

public Long getLongFromresultSet( ResultSet rs,int columnPos ) {
  Object value = rs.get( columnPos );

  if( value instanceof Number) { //this should handle any numeric Java type like BigInteger,Long etc.
    return ((Number)value).longValue(); //autoBoxing here
  }  

  ... //handle non-Number cases
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐