2010-08-17 15 views

risposta

10

come altri hanno già detto: il conducente mappe di tutto per BigDecimal, anche se è definito come il numero (38) (che potrebbe essere mappata BigInteger)

Ma è abbastanza facile da scoprire quali sono le mappe del driver. Basta fare un getObject() sulla colonna del ResultSet e vedere quale classe ha generato il driver.

Qualcosa di simile:

 
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

È passato un po 'di tempo, ma credo che sia BIGINT in Java. È BigDecimal. Ricordo che la percezione della classe che avresti incontrato avrebbe dato un suggerimento ...

+0

Si potrebbe pensare che il 'ClassCastException' avrebbe aiutato, ma in questo caso, abbiamo usare Hibernate per eseguire la query e il metodo restituisce' Object'. –

+0

A http://stackoverflow.com/questions/3504751/what-object-type-does-spring-hibernate-template-execute-method-return-for-a-count, faccio una domanda più specifica per il nostro caso particolare che usa Spring Hibernate Template. –

2

Secondo the Oracle documentation è java.math.BigDecimal.


"ma il mio cast di BigDecimal getta una ClassCastException"

Hai provato a usare oracle.sql.NUMBER?

+0

Questo è quello che ho pensato anch'io, ma il mio cast su 'BigDecimal' genera un' ClassCastException'. –

+0

Secondo questa tabella, sebbene il tipo di dati Oracle sia sempre 'NUMERIC', il tipo di dati JDBC dipende dal tipo di dati SQL sottostante che per' INTEGER' o 'SMALLINT', sarebbe' int'. –

+0

Controllerò il tipo per scoprirlo. –

Problemi correlati