2010-08-17 16 views

Odpowiedz

10

jak inni już powiedział: kierowca odwzorowuje wszystko BigDecimal, nawet jeśli jest zdefiniowany jako liczba (38) (które mogą być przypisane do BigInteger)

Ale jest to dość łatwe do znalezienia się, co mapy sterownika. Po prostu wykonaj getObject() w kolumnie ResultSet i zobacz, którą klasę wygenerował sterownik.

Coś jak:

 
ResultSet rs = statement.executeQuery("select the_number_column from the_table"); 
if (rs.next()) 
{ 
    Object o = rs.getObject(1); 
    System.out.println("Class: " + o.getClass().getName()); 
}
1

Minęło trochę czasu, ale uważam, że jest to BIGINT w Javie. To BigDecimal. Pamiętam, że wyjątek klasy, na który napotkasz, dałby wskazówkę ...

+0

Można by myśleć 'ClassCastException' pomogłoby, ale w tym przypadku używamy Hibernacja do wykonania zapytania i metoda zwraca' Object'. –

+0

Na http://stackoverflow.com/questions/3504751/what-object-type-does-spring-hibernate-template-execute-method-return-for--ountount, zadaję pytanie bardziej specyficzne dla naszego konkretnego przypadku który korzysta ze Spring Hibernate Template. –

2

Według the Oracle documentation jest to java.math.BigDecimal.


"ale moja obsada do BigDecimal rzuca ClassCastException"

Czy próbowali za pomocą oracle.sql.NUMBER?

+0

Tak też myślałem, ale moja obsada na "BigDecimal' rzuca" ClassCastException ". –

+0

Zgodnie z tą tabelą, chociaż typ danych Oracle ma zawsze wartość "NUMERIC", typ danych JDBC zależy od podstawowego typu danych SQL, który w przypadku "INTEGER" lub "SMALLINT" miałby wartość "int". –

+0

Sprawdzę typ, aby się dowiedzieć. –

Powiązane problemy