0

我正在尝试将测试数据库从 Oracle 迁移到 HSQLDB。在 Oracle 中,我有类型为 NUMERIC (x,0) 的字段。据我所知,与 BigDecimal java 类型相关的 NUMERIC 类型。当我运行测试并尝试在数据库中保存记录时,出现以下错误:

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

如果我将类型从 NUMERIC(x,0) 更改为 INTEGER,则它可以正常工作。但 INTEGER 类型不支持 HSQLDB 中的精度和小数位数。

有没有办法解决这个问题?

更新:

    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

我正在使用 ActiveJDBC

public class Employee extends Model {...}

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

1 回答 1

0

当前版本的 HSQLDB (2.3.4) 支持 NUMERIC(x,0),还支持 PreparedStatement setInt()、setBigDecimal() 和 setObject(),列上定义为 NUMERIC(x,0) 的 Java 整数值。所以错误信息看起来不可能

这些是解决此问题的可能性:

  1. 添加;sql.syntax_mys到您的 HSQLDB 连接 URL 并使用INTEGER(n)MySQL 类型
  2. 添加;sql.syntax_ora到您的 HSQLDB 连接 URL 并使用NUMBER(n)Oracle 类型
  3. createIt("e_type", 1.0, "name", "Employee")如果 ActiveJDBC 接受,则使用或 createIt("e_type", "1", "name", "Employee")
  4. 要求 ActiveJDBC 添加对 HSQLDB 的支持。这对他们来说应该很容易做到。
于 2016-12-09T13:29:00.707 回答