Classcastexception-Fehler: java.lang.Double nicht kompatibel mit java.math.BigDecimal
Diese Ausnahme kommt in sehr seltsame Weise.
Lese ich den Wert einer variable aus einer gespeicherten Prozedur, deren Typ DECIMAL(15,4).
Und bei java-Ende war ich Typumwandlung dieser Wert zu BigDecimal, und es funktionierte perfekt in Ordnung.
Nun begann ich immer diese exception :java.lang.Classcastexception-Fehler: java.lang.Double nicht kompatibel mit java.math.BigDecimal und diese zu lösen bin ich casting diese variable Art zu Doppel - und dann Gießen Sie es zurück an BigDecimal mit
Neu :
Double myVarDb= //reading some variable's value with type-> DECIMAL(15,4) from Db end
BigDecimal myVar = (BigDecimal)BigDecimal.valueOf(myVarDb);
Alt :
BigDecimal myVar= //reading some variable's value with type-> DECIMAL(15,4)
Wenn in den Fall, jemand hat sich dieses Problem oder hat eine Idee warum es kommen könnte, bitte guide.
UPDATE : ich habe beide Treiber und unten sind die Versionen :
Alt : DriverVersion: 3.6.60
NEU : DriverVersion: 3.64.106
Den Instanzen, die ich bin immer erstellt nach dem Auslesen der Werte sind vom Typ:
Alt : BigDecimal
NEU : Doppel -
So das problem ist jetzt klar, warum machen wir diese Ausnahme, weil wir immer Doppelt Objekt nun als Standard-Objekt.
So jemand kann werfen etwas Licht auf, warum diese verschiedenen Arten von Instanzen werden immer erstellt?
Ist dies wegen der verschiedenen Versionen des JDBC-Treibers?
- Um vollständig zu beantworten Ihre Fragen, brauchen wir wirklich zu sehen (so etwas wie) den code auf der anderen Seite diejenigen, die
=
Betreiber.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum sollte man sich den Wert als Double dann versuchen zu wirken, um bigDecimal, die falsch ist. Es gibt keine Notwendigkeit, machen es schwieriger und komplexer.
In Java und JDBC-alle DECIMAL-Werte zugeordnet sind, die mit BigDecimal und es gibt die
getBigDecimel()
- Methode von ResultSet, die ermöglicht es Ihnen, direkt bekommen Sie ein s ein BigDecimal.Werden Sie verwenden Sie einfach diese Zeile code:
Statt all dieser (das ist sehr schlecht):
Können Sie sehen, aus Mapping von SQL-und Java-Typen, dass:
Hinweis:
In deinem alten code der Grund, warum Sie waren immer eine cast Exception kann sein, weil Sie nicht mit der .getBigDecimal() Methode.
ResultSet
oder ähnliches, aber uns nicht wirklich wissen, dass.