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

Jul*_*lia 5 java postgresql jdbc postgresql-9.1

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

resultSet.getLong(columnPos)
Run Code Online (Sandbox Code Playgroud)

导致ArrayIndexOutOfBoundsException.

resultSet.getBigInteger(columnPos)
Run Code Online (Sandbox Code Playgroud)

要么

resultSet.get(columnPos)
Run Code Online (Sandbox Code Playgroud)

有一个跟随toString和解析工作正常.对此有何正确处理?我应该先BigInteger打电话toString,解析一下Long吗?或者是否有更好的方法来告诉ResultSetScrollableResults正确的Java列类型?

谢谢.

Tho*_*mas 1

数据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
}
Run Code Online (Sandbox Code Playgroud)