2016-12-09 1 views
0

Ich versuche, Test DB von Oracle zu HSQLDB zu migrieren. In Oracle habe ich Felder mit dem Typ NUMERIC (x, 0). Wie ich NUMERIC Typ mit BigDecimal Java-Typ verbunden wissen. Und wenn ich meine Tests laufen und versuchen Datensatz zu speichern in DB ich folgende Fehlermeldung haben:ClassCastException beim Speichern von Datensatz in HSQLDB

Caused by: java.sql.SQLException: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal 

Wenn ich Art von NUMERIC ändern (x, 0) auf ganzzahlige es Arbeit richtig. Aber INTEGER-Typ unterstützt keine Genauigkeit und Skalierung in HSQLDB.

Gibt es die Möglichkeit, dieses Problem zu beheben?

AKTUALISIERT:

at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source) 
    at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source) 
    at org.javalite.activejdbc.DB.execInsert(DB.java:521) 
    at org.javalite.activejdbc.Model.insert(Model.java:2096) 
    at org.javalite.activejdbc.Model.save(Model.java:2008) 
    at org.javalite.activejdbc.Model.saveIt(Model.java:1935) 
    at org.javalite.activejdbc.Model.createIt(Model.java:1625) 
Caused by: java.sql.SQLException: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal 
    ... 41 more 

Ich verwende ActiveJDBC

public class Employee extends Model {...} 

Employee e = (Employee) Employee.createIt("e_type", 1, "name", "Employee") 
+0

@ Nastya - Sie versuchen, Integer-Nummer in eine BigDecimal-Zahl zu konvertieren. Verwenden Sie BigDecimal statt Integer, um dies zu beheben. – kit

+0

hier: http://database-management.softwareinsider.com/l/15/HSQLDB Sie können nachschlagen, welche Datentypen hsqldb unterstützt – XtremeBaumer

+0

HSQLDB unterstützt NUMERIC. Fügen Sie Ihrer Frage den Code hinzu, den Sie verwenden, um das INTEGER und die oberen Zeilen aus der vollständigen Stapelüberwachung zu speichern. – fredt

Antwort

0

Die aktuelle Version von HSQLDB (2.3.4) NUMERIC unterstützt (x, 0) und unterstützt auch PreparedStatement setInt (), setBigDecimal() und setObject() mit Java Integer-Werten für Spalten, die als NUMERIC (x, 0) definiert sind. So wird die Fehlermeldung sieht unmöglich

Dies sind die Möglichkeiten, dies zu umgehen:

  1. hinzufügen ;sql.syntax_mys zu Ihrer HSQLDB Verbindung URL und verwenden INTEGER(n), die ist ein MySQL-Typen
  2. hinzufügen ;sql.syntax_ora zu Ihrer HSQLDB Verbindungs-URL und verwenden NUMBER(n) es ist, den Oracle-Typ
  3. Alternativ verwenden createIt("e_type", 1.0, "name", "Employee") oder CreateIt ("E_TYPE", "1", "Name", "Mitarbeiter"), wenn sie von ActiveJDBC akzeptiert
  4. fragen Sie ActiveJDBC, um Unterstützung für HSQLDB hinzuzufügen. Dies sollte für sie ziemlich einfach sein.
+0

ActiveJDBC ist ein Pass-Through-Modell: http://javalite.io/pass_through_framework. Es wird gerne übergeben, welchen Typ Sie es geben, um darunter zu stapeln. Das gleiche gilt, wenn Daten aus einer Tabelle geladen werden. Ich denke, dein Rat ist solide. – ipolevoy

Verwandte Themen